web-dev-qa-db-ja.com

同時要求が多い場合にApacheを最適化する

モバイルアプリからのAPIリクエストを処理するApache2Ubuntuサーバーを実行しています。

最近、リクエストが高くなる(同時ユーザーが増える)と、リクエストの応答が遅くなるというボトルネックに直面しています。以前は〜1または2秒で十分ですが、同時ユーザーが増加すると(特定のピーク時間に)、最大1秒以上遅延する可能性があります。サーバーの負荷、[〜#〜] cpu [〜#〜]およびメモリは非常に低いままです。

私の目標は、Apache2とUbuntu Serverの機能を増やして、最小の応答時間でできるだけ多くの同時ユーザーを提供することです。 メモリとCPUは主要な考慮事項ではありません VPS仕様は、制限に達した場合にスケールアップできるためです。どうやってやるの?

私がこれまでにしたこと:

  1. Ulimit / etc/security/limits.confを構成し、以下を追加します。

    • ソフトnofile40000
    • hard nofile 40000
    • ソフトnproc40000
  2. 次の行を/ etc/pam.d/common-sessionに追加します

    セッションが必要ですpam_limits.so

  3. Apache2を構成します/ etc/Apache2/mods-enabled/mpm_prefork.conf

 <IfModule mpm_prefork_module> 
 StartServers 20 
 MinSpareServers 25 
 MaxSpareServers 100 
 MaxRequestWorkers 150 
 MaxConnectionsPerChild 0 
 
 MaxClients 8192 
 MaxRequestsPerChild 0 
 ServerLimit 8192 
 </ IfModule> 
  1. 次の行を/ etc/sysctl.confに追加します

    fs.file-max = 2097152

応答時間は改善されているようですが(一部のリクエストはまだ遅れていますが)、ピーク時以外よりもはるかに遅いため、満足のいくものではありません。

2
neobie

Preforkモジュールの使用を停止し、Apacheでイベントmpmの使用を開始します。 Preforkは古い方法であり、今後はイベントmpmをインストールします。

1
Jason

これはWebサーバーではなく、チェーン内の他のサーバーである可能性があります。

  1. DNS。状況によっては、明らかにデータベースではない場合、DNSである可能性が高くなります。 nslookupを実行して、コマンドにかかる時間を確認します。次に、いくつかのドメインを検索します。
  2. そのネットワークは、tracerouteを実行し、ネットワーク上のホップのいずれかが通常よりも長くかかっているかどうかを確認します。
  3. Netstat -i 5ネットワークインターフェイスにエラーがあるかどうかを確認します。
  4. KeepAliveがオンになっていることを確認してください。特に、ajaxの重いサイトのようなものであれば、パフォーマンスが向上します。

MPMを切り替えることがあなたを助けるとは思わない。あなたの状況はリソースの制約ではありません。その何か他のもの。

0
Thomas Vincent