Laravelの"Allowed memory size of bytes exhausted"エラーへの対処
投稿日 2024年09月19日 更新日 2024年09月19日
Laravel開発中に「Allowed memory size of bytes exhausted」というエラーに遭遇した経験はありませんか?このエラーは、PHPのメモリ制限に達したときに発生します。本記事では、このエラーの原因と効果的な解決策を詳しく解説します。
エラーの原因
「Allowed memory size of bytes exhausted」エラーは、主に以下の理由で発生します:
1. 大量のデータ処理
2. 無限ループや非効率なコード
3. PHPのメモリ制限が低すぎる
解決策
1. PHPのメモリ制限を増やす
最も簡単な解決策は、PHPのメモリ制限を増やすことです。
`.env`ファイルに以下の行を追加します:
PHP_MEMORY_LIMIT=512M
または、`php.ini`ファイルで`memory_limit`の値を変更します:
memory_limit = 512M
2. コードの最適化
メモリ使用量を減らすために、コードを最適化することも重要です:
- 大きな配列やオブジェクトを必要以上に保持しない
- データベースクエリを最適化し、必要なデータのみを取得する
- ガベージコレクションを適切に使用する
例:
// メモリ効率の悪いコード
$allData = DB::table('huge_table')->get();
// 最適化されたコード
$allData = DB::table('huge_table')->select('id', 'name')->get();
3. キューを使用する
大量のデータ処理や時間のかかる処理には、Laravelのキューシステムを利用することをお勧めします:
use App\Jobs\ProcessLargeDataset;
ProcessLargeDataset::dispatch($data);
4. Chunkingの利用
大量のデータを扱う場合は、`chunk`メソッドを使用して小分けに処理することで、メモリ使用量を抑えられます:
DB::table('huge_table')->chunk(100, function ($users) {
foreach ($users as $user) {
// 処理
}
});
5. Laravelの設定を最適化
`config/database.php`ファイルで、データベース接続のメモリ使用量を調整できます:
'mysql' => [
// ...
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false,
]) : [],
],
まとめ
「Allowed memory size of bytes exhausted」エラーは、適切な対策を講じることで解決できます。PHPのメモリ制限を増やすだけでなく、コードの最適化やLaravelの機能を活用することで、アプリケーションのパフォーマンスと安定性を向上させることができます。
これらの方法を組み合わせることで、メモリ関連の問題を効果的に解決し、スムーズなLaravel開発を実現できるでしょう。
関連記事

新着記事
5
6
7
関連記事
5
6
7


60秒で完了