質問: サーバ運用初心者です。 ECサイトをAmazon EC2にて運用しており、CPUが95%以上の状態で張り付くという事象が発生してしまい、 504 Timeoutが頻発する事態となってしまっています。 ※CPUが95%以上の状態で張り付く問題はとある機能が原因であることは判明。 ※とある機能そのものに問題があるというよりは、PHPの"memory_limit"が足りていなくてCPUに無理させてしまっているのが問題とのこと。 そこでサーバーリソースの見直しを行っているのですが、インスタンスタイプを決めあぐねています。 EC-CUBEをAmazon EC2で運用する場合、どのインスタンスファミリーが良いのでしょうか? また、割り当てされるリソースはどのインスタンスサイズが良いのでしょうか? PHPのログを確認してみますと、以下のログがあり"memory_limit"は各ユーザーごとに256MB程度まで割り当てる必要がある?様に思えます。 ``` PHP Fatal error: Allowed memory size of 201326592 bytes exhausted (tried to allocate 54327952 bytes) in /opt/eccube/vendor/symfony/cache/Traits/FilesystemTrait.php on line 98 ``` 各種設定値 ----- #### PHP - "memory_limit" > > 管理者側: 4096MB > > ユーザー側: 192MB > > > #### Apache - mpm_prefork ``` StartServers 20 MinSpareServers 5 MaxSpareServers 20 ServerLimit 50 MaxRequestWorkers 50 MaxConnectionsPerChild 0 ``` ### 試したこと ここに問題に対して試したことを記載してください。 各種構成・補足情報(FW/ツールのバージョンなど) ------------------------- #### サーバー > > Linux: Ubuntu20.04 > > Web Server: Apache 2.4.41 > > Database: PostgreSQL 10.15 > > PHP: PHP 7.4.3 > > > #### EC-CUBE > > バージョン: 4.0.5 > > 導入プラグイン数: 34 (有効) > > 商品数: 6,000商品弱 (今後ちょっとずつ増えていく予定) > > カテゴリ数: 2,100カテゴリ弱 > > > #### AWS > > ■EC2 > > インスタンスタイプ: m5.xlarge(4vCPU / 16GB Mem) > > ■RDS > > インスタンスタイプ: db.m5.large(1Core 2CPU / 8GB Mem) > > ■ALB + WAF > > →導入済み > > >
回答: > > PHPのログを確認してみますと、以下のログがあり"memory_limit"は各ユーザーごとに256MB程度まで割り当てる必要がある?様に思えます。 > > > ご認識のとおりかと思います。 したがって「256MB × 想定ユーザー数」分のリソースを確保するのがよいと思われます。 例)1000ユーザ想定の場合 r5.8xlarge(256MB × 1000 = 256GB ) ご参考になれば幸いです。