web-dev-qa-db-ja.com

ApacheのMaxClients。プロセスのサイズを知る方法は?

http://httpd.Apache.org/docs/2.2/misc/perf-tuning.html から

Webサーバーのパフォーマンスに影響を与える最大のハードウェア問題はRAMです。スワップするとユーザーが「十分に速い」と考えるポイントを超えて各リクエストのレイテンシが増加するため、ウェブサーバーがスワップする必要はありません。これにより、ユーザーは停止してリロードする必要があり、負荷がさらに増加し​​ます。 MaxClients設定を制御して、サーバーがスワッピングを開始するほど多くの子を生成しないようにすることができます。これを行うためのこの手順は簡単です。topなどのツールを使用してプロセスリストを調べ、平均Apacheプロセスのサイズを決定し、これを使用可能な合計メモリに分割して、他のプロセスのための余地を残します。

主な問題は、サイズを知る方法を理解できないことです。なぜなら、私は3888にこれ以上httpdのサイズがないからです。

しかし、MaxClientsの数を決定する必要があり、4GBのRAMがある場合、972を取得するので、MaxClientsでは900のように使用する必要がありますか?

9
Larry

まず、Apacheプロセスの1つのPIDを決定します。

その後、次のようなことができます:

cat /proc/PIDHERE/status | grep VmRSS

これにより、次のように、特定のプロセスの(現在の)常駐セットサイズが得られます。

VmRSS: 304456 kB

この値は、そのとおりです。RAMに常駐するプロセスのサイズです。

次に、測定単位を正規化します(4GB * 1024 * 1024 = 4,194,304 KB)。分割:

4194304 KB / 304456 KB = 13.77 processes

おそらくメモリを消費する他のプロセスがシステム上で実行されており、理想的にはスワッピングを最小限に抑えたいと考えているため、(私の数値を使用して)13個のApache MaxClientsを構成したくない場合は、(自分の裁量で)少し少なくすることをお勧めします)。

これは大まかな見積もりです。負荷によっては、Apacheプロセスのサイズが時間とともに大きくなる場合があります。

9
loopforever

テストシナリオからmaxClientsを予測することが出発点ですが、問題を適切に解決するには、実際のトラフィックでのアプリケーションの動作を測定する必要があります。

Apacheがpre-forkを実行していると仮定します...

Cronジョブをセットアップして、httpdプロセスの数と「free」の出力をカウントします。ウェブサーバーがローカルファイルのコンテンツを提供している場合(およびそうでない場合でも、多くの場合)、キャッシュ/バッファーに使用できるメモリの量はパフォーマンスに大きな影響を与えることに注意してください。つまり、スワッピングのポイントに達した場合、Webパフォーマンスは恐ろしいものになるでしょう。

データを取得したら、それをグラフにプロットし、最小二乗回帰を実行します。外挿して、httpdメモリ使用量のターゲット制限に達したクライアントの数を見つけます。メモリターゲットの開始点は、物理メモリの80%/コンテンツのサイズの80%の小さい方になります。

(MinSpareServersを非常に高い値に設定している場合、結果は正確でない場合があります)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

理想的な世界では、同じログファイルでURL応答時間も測定しますが、それはさらに複雑になってきています。

4
symcbean