プロセス数の監視
勇んでこのサイト他を新しいサーバに移築はしたものの、なんかサーバが不安定で困ってます。このサーバ、既に数回死んでます(^_^;)
「不安定」ってのは
いきなりhttpdのプロセス数が増え始め、これがサーバのCPUを喰いつぶしサーバとして反応しなくなる
というもの。WEBサーバなのにhttpdが黙り込んじゃうのは結構困ります(^_^;)
最初はApacheの設定がキツくていわゆる「スパイラル・ダウン」に陥ってるのかと考え暫くApacheの設定をいじってたんすが、サーバには余力が(すごく)あること、また設定を
「考えられる最低レベル」
まで落としてもやっぱり死んだ(^^;ということでApache側での「調整」を諦め、他の対症療法を試みることにしました。
まずhttpdプロセス(MRTGは2つの値をセットで要求するのでついでにmysqldプロセスも)の数を把握するため、snmpd.confに
proc mysqld
を追記してsnmpdを再起動。その後mtrg.cfgに
ってな感じで777なワークディレクトリ(当然事前に作っておく)を指定してから
MaxBytes[process]: 100000
ThreshMaxI[process]: 30
ThreshProgI[process]: /root/httpd_restart.sh
Title[process]: process
PageTop[process]: <H1>process</H1>
Options[process]: gauge, absolute, noinfo, nopercent, integer
YLegend[process]: process
ShortLegend[process]: process
LegendI[process]:httpd
LegendO[process]:mysqld
ってな感じで追記しました。httpd_restart.shの中身は
/etc/rc.d/init.d/httpd restart
echo "httpd restarted" | mail -s "Notice" root
↑こんだけ。上限プロセス数(30)は、テキトーです。ログ見て、とりあえずこれ以上の数は死んだとき以外に見当たらないかな?、という数。
なんかいかにも付け焼き刃な対策ですが、何時間もサーバに黙り込まれるよりはマシかな、と(^_^;)
ついでに、お守りとしてhttpd.confに
なんてのも追記してみました。
「CPUを長時間(30秒以上)拘束してるプロセスを強制的に殺す」
という、本来はCGI暴走対策用の設定なんですが、とりあえず(^_^;)
結局MRTGのほうが実効しました。httpdプロセスの数が急増したのに気付いて自動的にプロセスを再起動したので、10分ほどLoad Averageが1000を越えるという惨状から見事に復活しています。
しかし…なんで暴走するんでしょかなぁ? ログ見ても、激しく謎(^_^;)
現在設定値を修正して再び様子を見てます。ついでに「HTなP4を無理矢理2.4のSMPカーネルで使う」もやめました。smpを必要とするほどの負荷は、現時点に於いて全然掛かってないので(^^;;