Amazon EC2 Linux インスタンスで実行されている Apache ウェブサーバーが断続的に応答しなくなります。「oom-killer」や「フォークプロセスに失敗」に関するメッセージや、その他のメモリ不足に関するメッセージがインスタンスのシステムログに表示されます。
注
EC2 コンソールから EC2 インスタンスのシステムログを表示するには、[Actions ] メニューで [Instance Settings]、[Get System Log] の順に選択します。
インスタンスに対するターミナルセッションを確立する場合は、実行している Linux インスタンスのディストリビューションに該当する場所にスタックトレースが表示されることがあります。たとえば、Debian/Ubuntu の場合は /var/log/syslog、Centos/RHEL の場合は /var/log/messages、systemd を使用しているシステムの場合は journalctl です。
これは通常、インスタンスのメモリを使い果たしたことを意味します。
サーバーが受け入れる接続の数と、そのサーバーが開始するプロセスの数に対する制限を設定できます。Apache プロセスの通常のメモリ使用量を計算し、Apache に割り当てるメモリの合計をその平均値で割ることで、制限値を得ることができます。
- インスタンスに対するターミナルセッションを開始します。接続できない場合は、インスタンスの再起動が必要になることがあります。
- ターミナルセッションから、top コマンドを実行して、インスタンス上のメモリ常駐プロセスのリストを表示します。メモリ使用量の割合で降順にリストをソートします。rpm ベースのインスタンスでソートするには、Shift + O を押してから、n を押します。他の Linux ディストリビューションでは、該当するオプションを選択してメモリ使用量でプロセスをソートします。
- Apache プロセスに対して返される %MEM 値の列を調べ、平均値を把握します。
- 1 つ以上の Apache プロセスの %MEM 値が他の Apache プロセスの %MEM の値に比べて異常に大きい場合は、サーバーで実行されているウェブアプリケーションにメモリリークがあると考えられます。潜在的なメモリリークの影響を小さくするには、設定変数 MaxRequestsPerChild(または Apache 2.4 の場合は MaxConnectionsPerChild)のデフォルト値を 4,000 から 1,000 に変更できます。この設定値はインスタンスの httpd.conf ファイルで定義されています。この変更により、メモリリークの原因を特定して対処できるまで、問題がある程度、軽減されます。メモリリークが疑われる場合は、新しい設定値で httpd.conf ファイルを更新し、変更を保存して、手順 7 にスキップできます。
- 以下のように設定変数 ServerLimit と MaxClients(または Apache 2.4 の場合は MaxRequestWorkers)の値を計算します。
a. インスタンスの RAM が 4 GB を超える場合は、Apache プロセスの平均 %MEM 値で
90% を割ります。たとえば、平均 %MEM 値が 0.8% だとすると、90% (0.9)を 0.8%(0.008)で割ります。
結果は 112.5 になり、小数点以下を切り捨てて整数にします。この場合は、112 になります。
b. インスタンスの RAM が 4 GB 以下の場合は、Apache プロセスの平均 %MEM 値で
80% を割ります。たとえば、平均 %MEM 値が 0.8% だとすると、80% (0.8)を 0.8%(0.008)で割ります。
結果は 100 になります。
注
これらの値は、インスタンスが専用のウェブサーバーであると想定して計算されます。サーバーで他のアプリケーションをホストしている場合は、この計算を行う前に、90% または 80% のいずれかから、これらのアプリケーションの合計メモリ使用量の割合を引きます。RAM が 4 GB 以下のインスタンスで、Apache に加えて他のアプリケーションを実行している場合は、パフォーマンスが低下することがあります。 - インスタンスの httpd.conf ファイルの設定変数 MaxClients(または MaxRequestWorkers)と ServerLimit を新しい値で更新し、変更を保存します。以下に例を示します。
MaxClients 112
ServerLimit 112 - ターミナルセッションから以下のコマンドを実行して、ウェブサーバーを再起動します。
service httpd graceful
EC2 Linux, Apache ウェブサーバー, httpd, チューン, チューニング, maxclients, apache2.4, HTTP, serverlimit, httpd.conf, mpm, oom, メモリ不足, クラッシュ, oom-killer