実現したいこと
Laravel6で80000人のユーザを想定してJobを実行していると、(php artisan queue:work -database)メモリリークがおきました
memory_get_usageをif文で試して、もしメモリ使用率が想定以上だったらgc_collect_cycles()を行う処理は効果があるでしょうか?
開発環境でこの状態なので、本番環境(supervisor)ではメモリリークが起きない様に実装したいです
極力php.iniの設定ファイルをいじったりはしたくないです
jobを分けるにしても、jobの状態の管理をしたいので、DBのテーブルのjobsテーブルの値で把握したく、できるだけ1つのjobで対応したいのがあります。
foreach ($all_user as $50user) { foreach ($50user as $user_mail) { Log::info($user_mail); } unset($50user); if (memory_get_usage() > 128 * 1024 * 1024) { // 128MBを超えたら gc_collect_cycles(); // ガベージコレクターを実行してメモリを解放 } sleep(60); }
メモリ
前提
Laravel6で80000人のユーザを想定してJobを実行していると、Allowed memory size of 134217728 bytes exhausteエラーになってしまった
発生している問題・エラーメッセージ
console.ERROR: Allowed memory size of 134217728 bytes exhausted (tried to allocate 40960 bytes) {"exception":"[object] (Symfony\Component\Debug\Exception\FatalErrorException(code: 1): Allowed memory size of 134217728 bytes exhausted (tried to allocate 40960 bytes) at Vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php:95)"} []
該当のソースコード
LaravelPHP
foreach ($all_user as $50user) { foreach ($50user as $user_mail) { Log::info($user_mail); } unset($50user); sleep(60); }
試したこと
90000人のユーザをPluckでforeach文で回している時、変数に対してunsetを行いました
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。