Apache2 prefork MaxClients ServerLimitのチューニング


22

Apache2をWebサーバーとして使用している128 GB Ramのマシンがあります(このマシンにはデータベースサーバーがありません。データベースマシンは最大2000接続を処理できる64 GB Ramマシンです)。監視ツールを使用すると、現在44人の忙しいワーカーと12人のアイドルワーカーがいることがわかりますが、私のpreforkモジュールの最適な理論値は何ですか?

負荷の高い時間帯にWebサイトをロードするときに空白のページが表示されることがあり、Apacheエラーログに次のエラーが記録されました。

[注意]子pid 13595終了信号セグメンテーションエラー(11)

この問題もどのように解決できますか?

私のApache2 Preforkモジュールの構成:

StartServers          3
MinSpareServers       3
MaxSpareServers       5
ServerLimit           3200
MaxClients            3100
MaxRequestsPerChild   0

wwwマシンの無料-h

合計:128 G空き:97 GB(apache2実行中)共有0bバッファー1.9 Gキャッシュ23 G

Apache2およびその他のプログラムで使用されるRam:

Private  +   Shared  =  RAM used    Program

 96.0 KiB +  61.0 KiB = 157.0 KiB   sh
176.0 KiB +  26.0 KiB = 202.0 KiB   atd
176.0 KiB +  35.5 KiB = 211.5 KiB   acpid
208.0 KiB +  19.5 KiB = 227.5 KiB   mdadm
204.0 KiB +  30.0 KiB = 234.0 KiB   init
248.0 KiB +  62.0 KiB = 310.0 KiB   sendmail
376.0 KiB +  36.0 KiB = 412.0 KiB   dbus-daemon
388.0 KiB + 285.5 KiB = 673.5 KiB   cron (2)
820.0 KiB +  42.0 KiB = 862.0 KiB   gam_server
920.0 KiB + 108.0 KiB =   1.0 MiB   ntpd
968.0 KiB + 243.0 KiB =   1.2 MiB   getty (6)
  1.3 MiB + 351.5 KiB =   1.6 MiB   udevd (3)
  1.5 MiB + 343.0 KiB =   1.8 MiB   sendmail-msp
  2.0 MiB + 910.0 KiB =   2.9 MiB   plugin-localresources2
  3.4 MiB +  50.0 KiB =   3.4 MiB   rsyslogd
  3.6 MiB +  68.5 KiB =   3.7 MiB   bash
  1.9 MiB +   2.1 MiB =   4.0 MiB   sendmail-mta (4)
  3.8 MiB + 556.0 KiB =   4.3 MiB   sshd (2)
  3.7 MiB +   1.2 MiB =   4.8 MiB   plugin-apache2
  5.1 MiB +   1.2 MiB =   6.3 MiB   agent-service
  7.0 MiB + 654.0 KiB =   7.6 MiB   fail2ban-server
  9.6 MiB +   2.6 MiB =  12.2 MiB   proftpd (8)
 59.2 MiB +  70.0 KiB =  59.3 MiB   miniserv.pl
 96.8 MiB +   3.6 MiB = 100.4 MiB   php5-cgi (2)
196.4 MiB +  35.9 MiB = 232.3 MiB   apache2 (40)
---------------------------------
                     tot 450.0 MiB

2
Webサーバー内で実行されているアプリケーションコードは何ですか?それが最も可能性の高い犯人です。
シェーンマッデン

apache2ctlステータスのサンプルをいくつか送信してください。多分error_logに何かありますか?
フルボイェショポルヤル14年

回答:


63

Apache Prefork設定、Apacheごとのパフォーマンスチューニングガイドライン

見積もり:

The single biggest hardware issue affecting webserver performance is RAM.
A webserver should never ever have to swap, as swapping increases the latency
of each request beyond a point that users consider "fast enough". 
This causes users to hit stop and reload, further increasing the load.
You can, and should, control the MaxClients setting so that your server does
not spawn so many children it starts swapping. This procedure for doing this
is simple: determine the size of your average Apache process, by looking at
your process list via a tool such as top, and divide this into your total 
available memory, leaving some room for other processes.

以下の入力に基づいて、このように設定する必要があります。

  • 合計メモリ:128 GB
  • apacheを除くすべてに対して-10%のメモリ:115 GB
  • ここで、単一のApacheプロセスがどれだけ使用しているかを把握する必要があります。

これを計算するには、次のスクリプトを使用できます。

pgrep apache2 | xargs -n1 -I{} cat /proc/{}/smaps | \
  awk '{if ($0 ~ /stack/) {pids+=1} else if ($0 ~/^Shared_/) 
    {shared+=$2} else if ($0 ~ /^Pss:/) {priv+=$2}} END {
      printf "%.2f MB\n",(priv+shared/(pids*pids))/1024}'

これは、アクティブなApacheプロセスの数ごとに共有使用量を比例的に分割し、Pss(比例セットサイズ)の上に追加しようとしながら、単一のApacheプロセスがメモリを使用している量の最良の推定です

最後に、この数字で115 GBを分割すると、が得られMaxClients/ServerLimitます。ここから、次のような他の数値を比較的計算できます

  • StartServers MaxClientsの30%
  • MinSpareServers MaxClientsの5%
  • MaxSpareServers MaxClientsの10%
  • ServerLimit == MaxClients
  • MaxConnectionsPerChild 10000(メモリリークの多いアプリで起こりうる問題に対処するための保守的な代替手段として)

2
私よりも多くの担当者がこの回答に投票してくれることを願っています。ありがとうございます!
ユーザーN 14年

2
あなたの計算スクリプトは私に842.13 MBを与えます。これは、私がするよりも一桁大きい(CentOS 6.7のApache 2.2)。
クインコメンダント

1
プリフォークモードです。i.imgur.com/SS2gIXI.png/server-info
クインコメンダント

1
@QuinnComendantの邪悪なトリックしかし、Preforkモジュールが利用可能であればIfModuleはtrueになり(実際)、両方のオプションが利用可能ですworkerとMPM ... preforkが1プロセス800 MBのメモリに使用できる方法はありません。プロセス名apache2をhttpdに参照するスクリプトの行を変更しましたか?
フルボイェショポルジャー

1
@shawnなんでそんなこと言うの?どのように計算すべきだと思いますか?
フルボイェショポルジャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.