
私は apache2 を実行する Ubuntu サーバーを所有しており、限られた時間内に約 500 ~ 1000 人の同時ユーザーがアクセスすると予想しています。サーバーは、postgresql データベース (サイズは約 20 MB) に接続されたカスタム (かなり軽量) PHP ページと静的コンテンツを混合して提供します。ハードウェアは安定しており、かなり強力です。
- インテル Xeon E5420 @ 2.5GHz
- 12 GB の RAM
このサーバーでの以前のラッシュ時に、ServerLimit、MPM モジュールの MaxClients を増やし、Timeout と KeepAliveTimeout を減らしました。うまくいきましたが、動作が遅く、もっとできることがあると思います。このような負荷を処理するには、Apache サーバーをどのように構成すればよいでしょうか?
答え1
このシナリオでのボトルネックは、PHP と、PHP がデータベースに対して行っている処理です。呼び出しごとに新しい接続を開くと、他の何よりもディスク アクセスで I/O の壁にぶつかる可能性が高くなります。最善の方法は、データベースと静的コンテンツを RAM ディスクに保持し、必要に応じてディスク上のデータベースに変更をコミットすることです。また、PHP で RAM 専用の高速ハッシュ検索を使用して効率的なクエリ キャッシュ メカニズムを維持し、クエリ キャッシュ検索に関連する不要な処理サイクルで postgresql に負担をかけないようにします。postgresql は、独自のコードよりもクエリ キャッシュが効率的である可能性がありますが、そもそも接続する必要がないほど高速ではありません。
答え2
サーバーは簡単に処理できるはずです。いくつか注意点があります:
- SSL を使用すると計算要件が増加します。したがって、プレーン HTTP を使用してください。
- prefork MPM を使用するとメモリ要件が増加します。そのため、worker MPM を使用してください。
- より多くのコアでより多くの同時実行を使用すると、パフォーマンスが向上します。
- PostgreSQL データベースにさらに多くの RAM を割り当てます。
これらは単なる一般的なガイドラインです。