プロセス数の監視

投稿日:

勇んでこのサイト他を新しいサーバに移築はしたものの、なんかサーバが不安定で困ってます。このサーバ、既に数回死んでます(^_^;)

「不安定」ってのは

いきなりhttpdのプロセス数が増え始め、これがサーバのCPUを喰いつぶしサーバとして反応しなくなる

というもの。WEBサーバなのにhttpdが黙り込んじゃうのは結構困ります(^_^;)

最初はApacheの設定がキツくていわゆる「スパイラル・ダウン」に陥ってるのかと考え暫くApacheの設定をいじってたんすが、サーバには余力が(すごく)あること、また設定を

「考えられる最低レベル」

まで落としてもやっぱり死んだ(^^;ということでApache側での「調整」を諦め、他の対症療法を試みることにしました。

まずhttpdプロセス(MRTGは2つの値をセットで要求するのでついでにmysqldプロセスも)の数を把握するため、snmpd.confに

proc httpd
proc mysqld

を追記してsnmpdを再起動。その後mtrg.cfgに

ThreshDir: /var/www/html/mrtg/threshdir

ってな感じで777なワークディレクトリ(当然事前に作っておく)を指定してから

Target[process]: .1.3.6.1.4.1.2021.2.1.5.1&.1.3.6.1.4.1.2021.2.1.5.2:private@localhost
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の中身は

#!/bin/sh
/etc/rc.d/init.d/httpd restart
echo "httpd restarted" | mail -s "Notice" root

↑こんだけ。上限プロセス数(30)は、テキトーです。ログ見て、とりあえずこれ以上の数は死んだとき以外に見当たらないかな?、という数。

なんかいかにも付け焼き刃な対策ですが、何時間もサーバに黙り込まれるよりはマシかな、と(^_^;)

ついでに、お守りとしてhttpd.confに

RlimitCPU 20 30

なんてのも追記してみました。

「CPUを長時間(30秒以上)拘束してるプロセスを強制的に殺す」

という、本来はCGI暴走対策用の設定なんですが、とりあえず(^_^;)


041109a.gif

結局MRTGのほうが実効しました。httpdプロセスの数が急増したのに気付いて自動的にプロセスを再起動したので、10分ほどLoad Averageが1000を越えるという惨状から見事に復活しています。

しかし…なんで暴走するんでしょかなぁ? ログ見ても、激しく謎(^_^;)

ようやく原因らしいのに突き当たりました。phpAの設定をミスってました。基本的に「組み込むだけでいい」のに、わざわざ妙な値を設定してた(^_^;)

現在設定値を修正して再び様子を見てます。ついでに「HTなP4を無理矢理2.4のSMPカーネルで使う」もやめました。smpを必要とするほどの負荷は、現時点に於いて全然掛かってないので(^^;;