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 に割り当てるメモリの合計をその平均値で割ることで、制限値を得ることができます。

  1. インスタンスに対するターミナルセッションを開始します。接続できない場合は、インスタンスの再起動が必要になることがあります。
  2. ターミナルセッションから、top コマンドを実行して、インスタンス上のメモリ常駐プロセスのリストを表示します。メモリ使用量の割合で降順にリストをソートします。rpm ベースのインスタンスでソートするには、Shift + O を押してから、n を押します。他の Linux ディストリビューションでは、該当するオプションを選択してメモリ使用量でプロセスをソートします。
  3. Apache プロセスに対して返される %MEM 値の列を調べ、平均値を把握します。
  4. 1 つ以上の Apache プロセスの %MEM 値が他の Apache プロセスの %MEM の値に比べて異常に大きい場合は、サーバーで実行されているウェブアプリケーションにメモリリークがあると考えられます。潜在的なメモリリークの影響を小さくするには、設定変数 MaxRequestsPerChild(または Apache 2.4 の場合は MaxConnectionsPerChild)のデフォルト値を 4,000 から 1,000 に変更できます。この設定値はインスタンスの httpd.conf ファイルで定義されています。この変更により、メモリリークの原因を特定して対処できるまで、問題がある程度、軽減されます。メモリリークが疑われる場合は、新しい設定値で httpd.conf ファイルを更新し、変更を保存して、手順 7 にスキップできます。
  5. 以下のように設定変数 ServerLimitMaxClients(または 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 に加えて他のアプリケーションを実行している場合は、パフォーマンスが低下することがあります。
  6. インスタンスの httpd.conf ファイルの設定変数 MaxClients(または MaxRequestWorkers)と ServerLimit を新しい値で更新し、変更を保存します。以下に例を示します。
         MaxClients  112
         ServerLimit  112
  7. ターミナルセッションから以下のコマンドを実行して、ウェブサーバーを再起動します。
         service httpd graceful

EC2 Linux, Apache ウェブサーバー, httpd, チューン, チューニング, maxclients, apache2.4, HTTP, serverlimit, httpd.conf, mpm, oom, メモリ不足, クラッシュ, oom-killer


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 1 月 7 日