- PR -

apacheのプロセスで

1
投稿者投稿内容
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2007-08-16 23:17
いつも楽しく拝見させていただいております。
さて、今回、どうしても解決にいたらないので皆様の知恵をお借りできないものかと存じます。

Linuxサーバー(RedHatES4)で Apache/2.0.53+PHP5(+DB)でサイトを作成しています。そこで、下記はps -aux | grep apacheの結果の一部なのですが、一段目、数時間も実行中のhttpdプロセスがあります(19時37分から実行中)。通常は。1秒〜5秒くらいで処理が終わっているのですが、下記のようにずっと生きているプロセスが発生するのです。また、apacheの設定ですが、300秒でtimeoutするように.confは書いてあります。

こういったプロセスは、半日に一回ほど現れるのですが、たまりますと正常にサーバーにアクセスできないほど重くなります。現在手動でkillすることで保っているのですが・・・。

 apacheのアクセスログで19:37台を調べましても、数時間も処理が行われるようなログはありません(むしろ実行中なので、apacheのログにたまってないような気がします。apacheのログを見ればわかるかと思っていたので手詰まりになりました)。

 このゾンビのようなプロセスを自動的に落とすにはどうすればよいのでしょうか?また、このプロセスが発生する原因を突き止めるにはどのような手立てがあるのでしょう・・・
 
どうぞよろしくお願いいたします。

apache 1320 88.5 0.2 22492 10920 ? R 19:37 181:18 /usr/local/apache2/bin/httpd -k start -DSSL
apache 18417 0.1 0.2 21712 10428 ? S 22:38 0:01 /usr/local/apache2/bin/httpd -k start -DSSL
apache 19409 0.0 0.2 21716 10436 ? S 22:40 0:01 /usr/local/apache2/bin/httpd -k start -DSSL
apache 19464 0.0 0.3 26988 15192 ? S 22:41 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2007-08-17 06:51
> apache 1320 88.5 0.2 22492 10920 ? R 19:37 181:18 /usr/local/apache2/bin/httpd -k start -DSSL

RだしCPU時間が181:18なので、これは暴走してますね。
「PHPでやってる処理にバグがある」というのが本命でしょー。

自動で殺すとすると、シェルスクリプトで定期的に監視して
CPU時間が異常に長いapache子プロセスをkillする、というのが楽ですかねえ。
親を殺さないように気をつけて。
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2007-08-17 09:09
ぽんす様
 
 さっそくのご回答ありがとうございます。shでプロセスを監視して、それを自動的にkillするという方向しかなさそうですね・・・。とりあえず手作業からは開放されるようにやってみます。

 自分もどこか、処理が永遠続いてしまうようなページが存在し、おそらく、ボットかなにかがアクセスしていると考えいてるのですが、このページの特定するいい方法はご存じないでしょうか・・・。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2007-08-18 07:14
まずはどういう動作をやっているのか、ログを書かせるように改修する手では。
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2007-08-18 12:31
ぽんす様

ありがとうございます。ログというと、apacheのアクセスログでしょうか?apacheのアクセスログには、その実行中のhttpdはログとしてたまらないのです(実行が完了してからログがたまるようで・・もし間違っていましたらすみません。実際その実行時間のログのURLをすべてブラウザで再度アクセスしてみたのですが、すべて1〜2秒で問題なくページが表示されるのです)。

 今はさっきほどのPSの結果を一度テキストに出力し、実行中+実行時間が5分以上のPIDをkilするというようなshを5分おきにまわすことで対処しています。

 これは根本的な解決に至ってないので、ぜひとも、その根源を見つけたいのですが・・・
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2007-08-18 22:24
「改修する」と言ったのは、PHPのプログラムのことです。
apacheのログを見てもDBのログを見ても、埒があかないでしょう。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2007-08-20 10:05
引用:

自分もどこか、処理が永遠続いてしまうようなページが存在し、おそらく、ボットかなにかがアクセスしていると考えいてるのですが、このページの特定するいい方法はご存じないでしょうか・・・。


server-status を有効にしてみたらわかるのでは?
1

スキルアップ/キャリアアップ(JOB@IT)