これが良い質問であり、同様の状況にいる誰にとっても役立つことを願っています。私は最近、会社の非常に上級のLinux管理者から引き継いだので、初めてコンテンツを顧客に提供するために新しいサーバーをセットアップする必要がありました。私の前任者は、出発時に他のものがより優先されていたため、この問題に関する限られた文書を残しました。私は持っていたドキュメントに加えて、以前のサーバーからの構成とすべてをセットアップするための多くのオンライン資料を広範囲にわたって参照しました。
私が構築しているサーバーの「スタック」は、CentOS 7、Apache 2.4.6、MariaDB 5.X、JSP /サーブレットを提供するTomcat 7です。本番用の以前のインストールでは、CentOS 5、古いバージョンのApacheとMySQL、およびTomcat 5.Xを使用していました。
Apacheはフロントエンドであり、AJPを使用してTomcatバックエンドに接続します。ほとんどのトラフィックはHTTPSです。
サーバーは、Gen 9 HPサーバーだと思います。RAID1アレイに32GB RAMとSSDが搭載されています。正常に動作した後、ユーザーにサービスを提供する能力を最大化することに関心があります。同時に、私は数百人のユーザーが急増することは珍しいことではないことを期待しています。そのために、私はスタックのどの時点でもボトルネックを防止するように努めました。 Apacheに移りますが、自分が何をすべきかを理解するのはより困難です。
「ワーカー」には3つの異なるタイプがあり、これらを最適化する3つの主要な問題があります。
1。 3つのオプション、prefork、mpm_worker、mpm_eventがあります。私はそれらをどのように使用するかについての一般的な理解を持っていますが、それらを構成する方法を本当に理解していません。
2。以前のサーバーのApacheとは異なり、StartServers、ServerLimit、MaxRequestsPerChildなどのオプションは/etc/httpd/conf/httpd.confにリストされていません。手動で上書きする必要があるデフォルト設定はありますか? 「前回手動で追加された」以外に、設定が古いhttpd.confにあり、新しい設定ではないという理由はありますか?
私はこれを参照しています。古いhttpd.confでは、新しい構成ファイルのどこにも同じようなものは見られません。仕様のみです。
// MPMをpreforkします
// StartServers:開始するサーバープロセスの数
// MinSpareServers:予備にしておくサーバープロセスの最小数
// MaxSpareServers:予備として保持されるサーバープロセスの最大数
// ServerLimit:サーバーの存続期間中のMaxClientsの最大値
// MaxClients:起動を許可されたサーバープロセスの最大数
// MaxRequestsPerChild:サーバープロセスが処理するリクエストの最大数
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
//ワーカーMPM
// StartServers:開始するサーバープロセスの初期数
// MaxClients:同時クライアント接続の最大数
// MinSpareThreads:予備として保持されるワーカースレッドの最小数
// MaxSpareThreads:予備として保持されるワーカースレッドの最大数
// ThreadsPerChild:各サーバープロセスのワーカースレッドの定数数
// MaxRequestsPerChild:サーバープロセスが処理するリクエストの最大数
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
ハッシュ記号はテキストを見出しとして表示するため、ハッシュ記号を//に置き換えてhttpd.confのコメントを示していることに注意してください。
新しいサーバーでの問題を逆にすると、古いワーカーでどのワーカーが使用されているのかわかりません。preforkとmpm_workerの両方の設定がありますが、実際に使用すべき仕様を見つけることはできません。
サーバーはまだ稼働していないので、現在の多数のクライアントの平均メモリ使用量を取得して、最大クライアントの「完全な」数を判断するためのオプションはありません。さらに、完璧な数、ちょうど適切な数。
だれでもhttp 500タイプのエラーを目にすることなく、およそ400人程度が特定の時間にサーバーを使用できることを確認したい場合、Apacheにどの設定を使用すればよいですか?
よろしくお願いします。これが余計なことではないことを願います。
ここには多くの可能な質問があるようですが、「応答」については少し構造化されていません。いくつか回答させていただけませんか。
使用されているマルチプロセッシングモジュール(MPM)を特定します。
「最も簡単な」方法は、現在実行中のモジュールをダンプし、mpm
モジュールを選択して、何が実行されているかを確認することです。 2つの方法は次のとおりです。
# apachectl -M | grep mpm
mpm_worker_module (shared)
# httpd -V | grep MPM
Server MPM: worker
使用中のMPMを変更する
CentOS7では、これは/etc/httpd/conf.modules.d/00-mpm.conf
という名前の設定ファイルで制御されるようになりました。これは短いファイルであり、いつでも1つのLoadModule
のみコメントを解除する必要があります。
LoadModule mpm_worker_module modules/mod_mpm_worker.so
目的のMPMをアクティブにするには、変更後にサービスの再起動が必要です。
必要な構成値を設定します
モジュールの構成ディレクティブの多くには、指定されていない場合のデフォルトがあります。 StartServers
using worker
を使用すると、デフォルトで3になり、prefork
= 5を使用する場合、詳細はこちらをご覧ください: https://httpd.Apache.org/docs/current /mod/mpm_common.html#startservers 。既存のファイルを編集するのではなく、上書きを含む新しいファイルを作成することをお勧めします。
/etc/httpd/conf.modules.d/10-worker.conf
のようなもの:
<IfModule mpm_worker_module>
ServerLimit 250
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 64
ThreadsPerChild 32
MaxClients 8000
MaxRequestsPerChild 10000
</IfModule>
何でもそうですが、正確な数値の調整は、ワークロードとアプリケーションでテストすることになります。ab
やsiege
などのツールが役立ちます。