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

SAWADA Hodaka php-users@php.gr.jp
Wed, 20 Jun 2001 13:26:31 +0900


なんか PHP-users からはみ出しつつあります。

At Wed, 20 Jun 2001 11:39:44 +0900,
Ryuzi Kambe wrote:

> > 改行位置をいじってます。
> 
> 申し訳ないです。少々行が長かったでしょうか。

いえ、一行に二つの疑問の境目があったので分割しました。

> > time nslookup example.co.jp とか
> > time nslookup 192.168.0.0 とかすると、おおよその時間がわかります。
> 
> やってみました。
> 引けないなら引けない、と即座に返信がかえってきます。

即座って、何秒くらいですか?
存在しないことが確実で、local DNS にキャッシュされていない
IP address で、試してくださいね。

手元の環境では、

time nslookup 192.168.0.0

real    0m15.036s

と、15秒かかって、time out で帰ってきます。

即座に判断できるというのは、全 IP address を知っていないと
できないと思うのですが?

nslookup -d 192.168.0.0
というふうに -d をつけると、
名前解決の努力のあとを見ることができます。
これも、いろんなドメインで試してみてください。

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

逆引きができないところから、大量にアクセスがあって、
待ちに入ってる httpd で埋め尽くされてるとかありませんか?

たとえば、社内用のプライベートアドレスからアクセスがあるけど、
逆引きを設定していないとか。

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

これは、まずいと思います。
# まぁ、1秒で引けないところはアクセス不許可っていうポリシーもありかも。

DNS のツリーを手繰って、知ってる親にたどり着いて、
今度は子供のところに順々に下りていって解決するんだから、
根気よく待ってあげましょうよ。

> > # でも、この件は DNS 回りではないところじゃないかなぁ。
> 
> しかし、HostNameLookupをoffにしたとたんに劇的に状況が
> 改善したので、なにかしら関連する部分があるのではないでしょうか。

元の mail には疑問点が二つあったと解釈しました。

その 1
> Apacheのhttpd.confで、HostnameLookupを offにしたところ、
> httpdのプロセスが暴走することはなくなりました。

log 取りが重いときは HostnameLookup を off にしましょうというのは、
FAQ のたぐいです。
逆引きができないところからのアクセスの割合を調べてみてください。

さらに、Apache の設定であって、PHP-users 向きではないでしょうね。

その 2
> ちょっとしたアクセス制限などにホスト名を利用する時があるのですが、
> それで名前がひけないと、Webサーバのプロセス全体が
> ロックしてしまうような感じでした。
> もしかして、DNSに対する問い合わせのタイムアウトの
> 部分も、PHPの中でコーディングしてやるべきなのでしょうか。

ということに関してなら、議論を進めたいと思います。

# でも、解決してしまいました?
-- 
         =^^= HODA =^^=          http://www.tail.gr.jp/~hoda/
澤田保隆@しっぽアルゴリズム情報研究所  mailto:hoda@tail.gr.jp