[PHP-users 128] Re: 暴走するhttpd プロセスの正体を確かめたい

Ryuzi Kambe php-users@php.gr.jp
Wed, 20 Jun 2001 11:39:44 +0900


On Tue, 19 Jun 2001 12:32:17 +0900
SAWADA Hodaka <hoda@tail.gr.jp> wrote:

> 改行位置をいじってます。

申し訳ないです。少々行が長かったでしょうか。

> At Tue, 19 Jun 2001 05:34:19 +0900,
> Ryuzi Kambe wrote:
> 
> > > > >現在、RedHat 6.2(kernel 2.2.16)、Apahce 1.3.14上で
> > > > >PHP 4.0.5を使っています。先日PHPLibを導入したのですが、
> > > > >その時期からなぜか突然httpdプロセスが暴走するように
> > > > >なってしまいました。
> > 
> > 原因となるものを突き止めることが出来ました。
> > Apacheのhttpd.confで、HostnameLookupを
> > offにしたところ、httpdのプロセスが暴走することは
> > なくなりました。
> 
> ということから、
> 
> > おそらく、名前を引きに行って戻って来なくなって
> > しまったのだと思います。
> 
> これは、納得できるのですが、
> 
> > ちょっとしたアクセス制限
> > などにホスト名を利用する時があるのですが、
> > それで名前がひけないと、Webサーバのプロセス全体が
> > ロックしてしまうような感じでした。
> 
> こちらは、上記設定とは無関係ではないでしょうか。

必ずしも因果関係がないのはおっしゃるとおりです。

> > 結局、Apache - PHP の間でどこがロックの現任になって
> > いたのかというのを、ApacheとPHPの設定をそれぞれ
> > 見比べて、突き止める必要がありそうです。
> > #ちなみに、apacheのmod_phpモジュールでPHPを利用しています。
> > 
> > もしかして、DNSに対する問い合わせのタイムアウトの
> > 部分も、PHPの中でコーディングしてやるべきなのでしょうか。
> 
> そんなに厳しい条件なんですか?
> 
> 例えば named を PHP の動いているマシンでも動かして、
> キャッシュとして使えば、既知のものに関しては速くなると思いますが、
> 未知の名前を解決するのに、ある程度時間がかかるのは
> しょうがないと思います。
> 
> とりあえず、Apache の log を見ながら、
> 引けたところと引けなかったところを
> それぞれどれくらいの時間で解決できたか統計でもとって、
> タイムアウトを吟味する必要があるでしょうね。
> 
> 手っ取り早く nslookup で調べてみてはいかがでしょうか。
> 
> time nslookup example.co.jp とか
> time nslookup 192.168.0.0 とかすると、おおよその時間がわかります。

やってみました。
引けないなら引けない、と即座に返信がかえってきます。

おそらく以前の状態は、DNSサーバの応答があるのだけれども、
DNSサーバがレスポンスを返さないでコネクションを保持し続ける、
というようなものだったのではないでしょうか。(その場合
なぜ CPU負荷が時間とともに増大しつづけるのかという
説明がつきませんが)

Apacheで、nslookupに相当する部分が、一定時間、DNSから
応答がなかった場合に自分からコネクションを切ってタイムアウト
してくれれば、今回のようなことにはならなかったような
気がします。

> # でも、この件は DNS 回りではないところじゃないかなぁ。

しかし、HostNameLookupをoffにしたとたんに劇的に状況が
改善したので、なにかしら関連する部分があるのではないでしょうか。

Ryuzi Kambe
kambe@mc.kcom.ne.jp