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


9

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

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

主な問題は、サイズを知る方法を理解できないことです。なぜなら、私は3888を超えないようにhttpdのサイズを持っているからです。

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


4
「私はこれ以上3888にhttpdのサイズを持っています」-「HUH?」と言うとき、私は皆のために話すと思います
ウォンブル

回答:


9

まず、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プロセスのサイズは、負荷によっては時間の経過とともに大きくなる可能性があります。


1
RSSには共有ページは含まれませんが、コピーオンライトとしてフラグが付けられたページは含まれます。つまり、マシン上に(rssの合計)/(物理メモリ)より多くのプロセス用のスペースがあります。他の場所での私の回答も参照してください。良好なパフォーマンスを得るには、空き領域が不可欠です。
symcbean 2011

4

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

あなたのApacheがプリフォークを実行していると仮定します...

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応答時間も測定しますが、それはさらに複雑になってきています。


私にとって、バッファ/キャッシュの変更は、11クライアントを実行している場合でも、サーバーが86または151クライアントに達した場合でも(サーバーがクラッシュした場合でも)、ほとんど変化しません。MEM変数には何が表示されると思いますか?私は2つの番号を取得しているので、Ubuntu 12.04が期待したもの以外のものを提供しているかどうか疑問に思います。
PeterB 2013年

「無料」で実行してみると、私が期待しているものが表示されます(2つの数字)。プロセスの数が異なっても、これらの数にほとんど変化がない場合は、イベントベースのサーバーを実行しているか、maxspareservers設定が愚かです。出力のサンプルとhttpd.confの関連部分を投稿した場合は、おそらくより良い画像があるでしょうか?
symcbean 2013年

....そして「クラッシュ」?どんなクラッシュ?
symcbean 2013年

申し訳ありませんが、httpd.confの設定とサンプル出力については、pastebin.com / aHZCagVnを参照してください。「クラッシュ」とは、クライアントが多すぎることを意味し、サーバーのメモリが不足してロックアップします。詳細についてはpastebin.com/fnXzBfQLをご覧ください。
PeterB 2013年

1
@PeterB MySQLdがこの問題を引き起こしている可能性が高いようです。カーネルのOOMキラーが起動すると、/ proc / PID / oom_score_adjの値に基づいて、まず最悪の違反者を殺します。出力からわかるように、mysqldが最初に使用されました。VMの制約内に収まるように、my.cnfの設定をより適切に調整する必要がある場合があります。/ temporary /の回避策として、OOMキラーキックを回避できるかどうかを確認するには、追加の仮想メモリ用のスワップファイルを追加してみてください。実際の問題を特定したら、それを取り除きます。
2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.