要望や症状
EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。
エラーメッセージ
Error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 1052672 bytes)
このエラーは、管理画面での商品一括登録や、商品データの大量処理時に発生することが多く、サイトの正常な動作を妨げる原因となります。
理由や原因
EC-CUBEの動作に必要なメモリ容量が、PHPのmemory_limit設定値を超過していることが原因です。
根本的な要因
EC-CUBE 4系では1GB程度のメモリが最低限必要となります。256MB〜512MBの設定では処理負荷の高い操作時にメモリ不足が発生します。特にMonologのログ処理やTwigテンプレートエンジンの処理時にメモリ消費が増加する傾向があります。
502エラーが発生する理由
メモリ不足による 502 Bad Gatewayエラーは、レンタルサーバー側のリソース制限に抵触している可能性が高いです。多くの共用レンタルサーバーでは、プロセス単位のメモリ使用量に上限が設けられているためです。
解決策
推奨される対応手順
メモリ不足エラーを解決するためには、以下の手順で対処してください。
1. メモリ設定の最適化
まず、PHPの設定ファイル(php.ini)で以下の設定を変更してください。
memory_limit = 1024M
max_execution_time = 300
2. 設定反映の確認
設定が正しく反映されているかを確認するため、以下のPHPファイルを作成してブラウザでアクセスしてください。
<?php
phpinfo();
memory_limitの値が1024Mに変更されていることを確認してください。確認後は、セキュリティ上の理由でファイルを削除してください。
3. サーバー環境の確認
レンタルサーバーの管理画面でPHPのメモリ制限設定を確認してください。共用サーバーの場合は、プロセス制限やCPU制限の有無も併せて確認が必要です。
根本的な解決策
サーバー環境の見直し
共用レンタルサーバーでメモリ制限の問題が解決されない場合は、VPSまたは専用サーバーへの移行を検討してください。EC-CUBE推奨環境(メモリ1GB以上)を満たすホスティングサービスの利用をお勧めします。
アプリケーション側の最適化
ログ出力を削減することでメモリ使用量を抑制することも可能です。以下の設定をapp/config/eccube/packages/prod/monolog.yamlに追加してください。
monolog:
handlers:
main:
level: error # debugからerrorに変更してログ出力を削減
注意事項
設定変更を行う際は、以下の点にご注意ください。
共用レンタルサーバーでは、memory_limitを大幅に増加させるとサーバー側の制限に抵触し、502エラーや503エラーが発生する場合があります。設定変更前には必ずデータベースとファイルのバックアップを取得してください。また、メモリ使用量の増加は他のプロセスにも影響を与える可能性があることを考慮してください。