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

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


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

申し訳ないです。 

> 即座って、何秒くらいですか?
> 存在しないことが確実で、local DNS にキャッシュされていない
> IP address で、試してくださいね。
> 
> 手元の環境では、
> 
> time nslookup 192.168.0.0
> 
> real    0m15.036s
> 
> と、15秒かかって、time out で帰ってきます。

172.21.0.0,172.21.0.1などで試してみました。

*** dns.xxx.xxx.xx can't find 172.21.0.0: No response from server
0.00user 0.01system 0:15.01elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (123major+22minor)pagefaults 0swaps

*** dns.xxx.xxx.xx can't find 172.21.0.1: No response from server
0.01user 0.00system 0:15.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (123major+22minor)pagefaults 0swaps

おおむね、上のような結果になりました。

> > おそらく以前の状態は、DNSサーバの応答があるのだけれども、
> > DNSサーバがレスポンスを返さないでコネクションを保持し続ける、
> > というようなものだったのではないでしょうか。(その場合
> > なぜ CPU負荷が時間とともに増大しつづけるのかという
> > 説明がつきませんが)
> 
> 逆引きができないところから、大量にアクセスがあって、
> 待ちに入ってる httpd で埋め尽くされてるとかありませんか?
> 
> たとえば、社内用のプライベートアドレスからアクセスがあるけど、
> 逆引きを設定していないとか。

、頻繁にアクセスがあるPHPのコードの中で
$hostname = getenv("REMOTE_HOST");
でホストネームを取得し、それをログとして保存している
箇所があり、これを見ると、逆引きが出来ていない
(名前が取得出来ていない)場合は、あまり少なくはないです。
(割合としては10件に一件くらい)
そのIPアドレスを手でnslookupしても、timeoutします。

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

Webサーバのプロセス全体がロックするような感じで、
httpdが暴走するのは、特にアクセスが集中する時間帯
(アクセスログの解析では午前0時前後にそれ以外の時間帯の
 2倍〜3倍程度のアクセスがあります)

また、DNSは外部のものを利用しており、その時間帯にその
DNSサーバがどのような状態になっていたのかというのは、
現在問い合わせているところですので、同じ環境を
再現するのは少々骨が折れそうです。

それらのテスト環境を整え、またテスト用のスクリプトを
書く必要があると思います。

どうしてもgetenv("REMOTE_HOST")を利用したいときには、
この問題がを解決することになると思いますが、まだ
不明確な部分もありますので、これ以上のML上での
議論は遠慮させていただこうと思います。 m(_ _)m

Ryuzi Kambe
kambe@mc.kcom.ne.jp