投稿日:2004年11月27日 作成鷹の巣

No.17814 Apache2で、CGIの動作が異様に遅いです



Apache2で、CGIの動作が異様に遅いです

No.17814 投稿時間:2004年11月27日(Sat) 19:27 投稿者名:Tomato URL:

はじめまして、Tomatoと申します。

先日から、FedoraCore2で自宅サーバーを構築していて、
ApacheでCGIを動作させる事までは出来たのですが、
そのCGIの動作が異様に重たいんです。
例えば、KENTさんのWebPatioを実行した場合だと、10秒程度
処理に時間がかかってしまいます。
サーバーは、Pentium4 2.8GHzで、メモリも512MB乗ってるので、
スペック的な問題では無いと思うのですが、対処法などは
ありますでしょうか。

また、mod_deflateを使って圧縮転送出来るように設定を
してあるのですが、これも影響していますでしょうか。

よろしくお願い致します。


ホスト名の取得方法は?

No.17815 投稿時間:2004年11月27日(Sat) 22:26 投稿者名:鷹の巣 URL:http://sakaguch.com/

> 先日から、FedoraCore2で自宅サーバーを構築していて、
> ApacheでCGIを動作させる事までは出来たのですが、
> そのCGIの動作が異様に重たいんです。
> 例えば、KENTさんのWebPatioを実行した場合だと、10秒程度
> 処理に時間がかかってしまいます。

http://www.example.com/patio/patio.cgiにアクセスして、10秒程度処理に時間がかかっているのでしょうか?
init.cgiのホスト名の取得方法は、gethostbyaddr関数を使うになっていますか?もし、「使う」になっているなら「使わない」に変更して、処理時間に変化があるかどうかを見て下さい。
# 0 : gethostbyaddr関数を使わない
# 1 : gethostbyaddr関数を使う
$gethostbyaddr = 0;

似たような事例がWebサーバーのAN HTTPDでも生じています。
先ずは、サーバー機上で、dprofppコマンドを使用して、処理に時間がかかっているCGIのperlスクリプトの動作時間を測定して見て下さい。
dprofpp -p patio.cgi > time_patio
を実行して、出来たtime_patioのTotal Elapsed Time以下の内容をこの掲示板に貼り付けて下さい。

参考URL:
AN HTTPD ゲストブック/コメント集(2004年10月11日02:34)
http://homepage1.nifty.com/yito/namazu/gbook/20041011.0234.html
の「鷹の巣 webmaster@sakaguch.com 2004/11/18 12:55」


> サーバーは、Pentium4 2.8GHzで、メモリも512MB乗ってるので、
> スペック的な問題では無いと思うのですが、対処法などは
> ありますでしょうか。
>
> また、mod_deflateを使って圧縮転送出来るように設定を
> してあるのですが、これも影響していますでしょうか。

ハードの仕様からは、圧縮転送で速くなっても遅くなることはないと思います。


ホスト名は、すでに取得しないように設定してあります。

No.17822 投稿時間:2004年11月28日(Sun) 08:26 投稿者名:Tomato URL:

ご回答ありがとう御座います。

> http://www.example.com/patio/patio.cgiにアクセスして、10秒程度処理に時間がかかっているのでしょうか?
> init.cgiのホスト名の取得方法は、gethostbyaddr関数を使うになっていますか?もし、「使う」になっているなら「使わない」に変更して、処理時間に変化があるかどうかを見て下さい。
> # 0 : gethostbyaddr関数を使わない
> # 1 : gethostbyaddr関数を使う
> $gethostbyaddr = 0;

ホスト名は、すでに取得しないように設定してあります。
また、他のCGI(aska bbs、ゲーム数個)を動作させてみましたが、こちらも同じく処理に非常に時間
がかかってしまいました。

> 似たような事例がWebサーバーのAN HTTPDでも生じています。
> 先ずは、サーバー機上で、dprofppコマンドを使用して、処理に時間がかかっているCGIのperlスクリプトの動作時間を測定して見て下さい。
> dprofpp -p patio.cgi > time_patio
> を実行して、出来たtime_patioのTotal Elapsed Time以下の内容をこの掲示板に貼り付けて下さい。

Total Elapsed Time = 0.05995 Seconds
User+System Time = 0.02995 Seconds
と表示されました。
これを見る限り、Perlの処理ではなく他の部分で時間がかかってそうな感じです。

駄目もとで、OSをdebianに変更してみると、patioは早くなりましたが、
罪と罰などのゲームCGIを設置した場合に、やはり動作が異様に遅く
感じます。

試しに、mod_perlを入れてみると、明らかに動作は速くなりましたが、
正常に動作しないCGIがあるため、あまり使いたくはありません。

> 参考URL:
> AN HTTPD ゲストブック/コメント集(2004年10月11日02:34)
> http://homepage1.nifty.com/yito/namazu/gbook/20041011.0234.html
> の「鷹の巣 webmaster@sakaguch.com 2004/11/18 12:55」

ご拝見させていただきました。

もしかすると、実際にはCGIの実行にはそれほど時間がかかってなく、
クライアント機での描画に時間がかかってるのでは?とも重いましたが、
mod_perlを導入すると軽くなる事からして、これが原因だとは思えません。

ご伝授よろしくお願い致します。


どこからアクセスしても遅いのでしょうか?

No.17827 投稿時間:2004年11月28日(Sun) 22:06 投稿者名:鷹の巣 URL:http://sakaguch.com/

> Total Elapsed Time = 0.05995 Seconds
> User+System Time = 0.02995 Seconds
> と表示されました。
> これを見る限り、Perlの処理ではなく他の部分で時間がかかってそうな感じです。

その通りです。

どこからアクセスして遅いのでしょうか?
http://www.websitepulse.com//tools.php3
のWebSite Testに
1)http://www.example.com/cgi-bin/patio/patio.cgi
2)http://グローバルアドレス/cgi-bin/patio/patio.cgi
を入れて、Statusから、Response timeをこの掲示板に貼り付けて下さい。

それと、サーバー機にブラウザが入っていましたら、
3)http://127.0.0.1/cgi-bin/patio/patio.cgi
でアクセスした体感時間を教えてください。

また、LAN内のクライアント機から
4)http://www.example.com/cgi-bin/patio/patio.cgi
5)http://グローバルアドレス/cgi-bin/patio/patio.cgi
6)http://プライベートアドレス/cgi-bin/patio/patio.cgi
でアクセスした体感時間を教えてください。


> もしかすると、実際にはCGIの実行にはそれほど時間がかかってなく、
> クライアント機での描画に時間がかかってるのでは?とも重いましたが、
> mod_perlを導入すると軽くなる事からして、これが原因だとは思えません。

私もそう思います。普通のhtmlファイルは、画像ファイルも含めて、普通に表示出来ているのですよね。
WEB PATIOのpatio/img/*.gifは、cgi-binのディレクトリの下に存在しているのでしょうか?


調べるサイトにより、時間が明らかに違うようです。

No.17828 投稿時間:2004年11月28日(Sun) 23:59 投稿者名:Tomato URL:

お返事有難う御座います。

> どこからアクセスして遅いのでしょうか?
> http://www.websitepulse.com//tools.php3
> のWebSite Testに
> 1)http://www.example.com/cgi-bin/patio/patio.cgi
> 2)http://グローバルアドレス/cgi-bin/patio/patio.cgi
> を入れて、Statusから、Response timeをこの掲示板に貼り付けて下さい。

Status: Server responded normally to all tests
Server Status: HTTP/1.1 200 OK
Server type: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1
Response time: 5.5727 seconds

このような結果となりました。
参考までに、
http://www.cman.jp/network/support/index.html
で確認すると、

取得ステータス HTTP/1.1 200 OK
ページ取得時間 0.081秒 (指定されたHTMLのみの取得時間です。回線状態にも影響されます)

との結果になりました。
調べるサイトにより、時間が明らかに違うようです。

> それと、サーバー機にブラウザが入っていましたら、
> 3)http://127.0.0.1/cgi-bin/patio/patio.cgi
> でアクセスした体感時間を教えてください。

サーバー機はGUIも何も入れてないんで、ちょっと分からないです。
wgetなら入ってますが、これで実行した所、一瞬で表示されました。

> また、LAN内のクライアント機から
> 4)http://www.example.com/cgi-bin/patio/patio.cgi
> 5)http://グローバルアドレス/cgi-bin/patio/patio.cgi
> 6)http://プライベートアドレス/cgi-bin/patio/patio.cgi
> でアクセスした体感時間を教えてください。

4:5秒程度です。(hostsファイルで、192.168.0.10 example.comと設定しています。)
5:ルーターの画面が表示されてしまいます。
6:5秒程度です。

ところが、外部のCGIProxyを通して見ると、ほぼリアルタイムに応答が帰って来ます。
また、Air-Hを使って確認もしてみましたが、これも正常でした。
ホストの取得か何かで時間がかかっているのでしょうか?

> 私もそう思います。普通のhtmlファイルは、画像ファイルも含めて、普通に表示出来ているのですよね。
> WEB PATIOのpatio/img/*.gifは、cgi-binのディレクトリの下に存在しているのでしょうか?

というより、どのディレクトリでもCGIを実行出来るようにしています。
普通のhtmlやSSIファイル、PHPなどは正常に表示出来ていて、CGI(Perl)のみが遅い状態です。

何度もお手数をおかけして申し訳御座いません。
よろしければ、ご伝授お願いします。


DNSサーバーの名前解決まわりかどうかは、まだ、判断できません。

No.17833 投稿時間:2004年11月29日(Mon) 07:00 投稿者名:鷹の巣 URL:http://sakaguch.com/

> > どこからアクセスして遅いのでしょうか?
> > http://www.websitepulse.com//tools.php3
> > のWebSite Testに
> > 1)http://www.example.com/cgi-bin/patio/patio.cgi
> > 2)http://グローバルアドレス/cgi-bin/patio/patio.cgi
> > を入れて、Statusから、Response timeをこの掲示板に貼り付けて下さい。
>
> Status: Server responded normally to all tests
> Server Status: HTTP/1.1 200 OK
> Server type: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1
> Response time: 5.5727 seconds

1)と2)両方の結果を教えて下さい。
# アクセスしたcgiのhtml出力のアクセス時間で、画像ファイル等のレンダリング時間は含まれません。

> 参考までに、
> http://www.cman.jp/network/support/index.html
> で確認すると、
>
> 取得ステータス HTTP/1.1 200 OK
> ページ取得時間 0.081秒 (指定されたHTMLのみの取得時間です。回線状態にも影響されます)

1)と2)両方の結果を教えて下さい。
# アクセスしたcgiのhtml出力のアクセス時間で、画像ファイル等のレンダリング時間は含まれません。

> > それと、サーバー機にブラウザが入っていましたら、
> > 3)http://127.0.0.1/cgi-bin/patio/patio.cgi
> > でアクセスした体感時間を教えてください。
>
> サーバー機はGUIも何も入れてないんで、ちょっと分からないです。
> wgetなら入ってますが、これで実行した所、一瞬で表示されました。

apacheのperlの実行結果出力は正常だと判断できます。
# アクセスしたcgiのhtml出力のアクセス時間で、画像ファイル等のレンダリング時間は含まれません。

> > また、LAN内のクライアント機から
> > 4)http://www.example.com/cgi-bin/patio/patio.cgi
> > 5)http://グローバルアドレス/cgi-bin/patio/patio.cgi
> > 6)http://プライベートアドレス/cgi-bin/patio/patio.cgi
> > でアクセスした体感時間を教えてください。
>
> 4:5秒程度です。(hostsファイルで、192.168.0.10 example.comと設定しています。)
> 5:ルーターの画面が表示されてしまいます。
> 6:5秒程度です。

4と6の時間は、同じになって当たり前ですが、時間が掛かりすぎています。
5は、とりあえず無視しましょう。


> ところが、外部のCGIProxyを通して見ると、ほぼリアルタイムに応答が帰って来ます。
> また、Air-Hを使って確認もしてみましたが、これも正常でした。
> ホストの取得か何かで時間がかかっているのでしょうか?
>
> > 私もそう思います。普通のhtmlファイルは、画像ファイルも含めて、普通に表示出来ているのですよね。
> > WEB PATIOのpatio/img/*.gifは、cgi-binのディレクトリの下に存在しているのでしょうか?
>
> というより、どのディレクトリでもCGIを実行出来るようにしています。
> 普通のhtmlやSSIファイル、PHPなどは正常に表示出来ていて、CGI(Perl)のみが遅い状態です。

CGI(Perl)を通じてアクセスされる画像ファイルに直接アクセスして見てください。
7)http://プライベートアドレス/cgi-bin/patio/img/*.gif
それで遅ければ、cgi-bin以外のディレクトリに設置場所を変更して、直接アクセスして見てください。
8)http://プライベートアドレス/img/*.gif

上記の内容からは、DNSサーバーの名前解決まわりかどうかは、まだ、判断できません。


サーバー側の/etc/hostsの設定追加で、反応速度の遅さは改善しました。

No.17846 投稿時間:2004年11月30日(Tue) 01:45 投稿者名:Tomato URL:

> > > どこからアクセスして遅いのでしょうか?
> > > http://www.websitepulse.com//tools.php3
> > > のWebSite Testに
> > > 1)http://www.example.com/cgi-bin/patio/patio.cgi
> > > 2)http://グローバルアドレス/cgi-bin/patio/patio.cgi
> > > を入れて、Statusから、Response timeをこの掲示板に貼り付けて下さい。
> > Status: Server responded normally to all tests
> > Server Status: HTTP/1.1 200 OK
> > Server type: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1
> > Response time: 5.5727 seconds
>
> 1)と2)両方の結果を教えて下さい。
> # アクセスしたcgiのhtml出力のアクセス時間で、画像ファイル等のレンダリング時間は含まれません。

2を忘れていて申し訳御座いません。

1・・・
Status: Server responded normally to all tests
Server Status: HTTP/1.1 200 OK
Server type: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1
Response time: 5.9516 seconds

2・・・
Status: Server responded normally to all tests
Server Status: HTTP/1.1 200 OK
Server type: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1
Response time: 5.7177 seconds

> > 参考までに、
> > http://www.cman.jp/network/support/index.html
> > で確認すると、
> >
> > 取得ステータス HTTP/1.1 200 OK
> > ページ取得時間 0.081秒 (指定されたHTMLのみの取得時間です。回線状態にも影響されます)
>
> 1)と2)両方の結果を教えて下さい。
> # アクセスしたcgiのhtml出力のアクセス時間で、画像ファイル等のレンダリング時間は含まれません。
>
1・・・
取得ステータス HTTP/1.1 200 OK
ページ取得時間 0.111秒 (指定されたHTMLのみの取得時間です。回線状態にも影響されます)

2・・・
取得ステータス HTTP/1.1 200 OK
ページ取得時間 0.029秒 (指定されたHTMLのみの取得時間です。回線状態にも影響されます)


> > > それと、サーバー機にブラウザが入っていましたら、
> > > 3)http://127.0.0.1/cgi-bin/patio/patio.cgi
> > > でアクセスした体感時間を教えてください。
> >
> > サーバー機はGUIも何も入れてないんで、ちょっと分からないです。
> > wgetなら入ってますが、これで実行した所、一瞬で表示されました。
>
> apacheのperlの実行結果出力は正常だと判断できます。
> # アクセスしたcgiのhtml出力のアクセス時間で、画像ファイル等のレンダリング時間は含まれません。

>
> > ところが、外部のCGIProxyを通して見ると、ほぼリアルタイムに応答が帰って来ます。
> > また、Air-Hを使って確認もしてみましたが、これも正常でした。
> > ホストの取得か何かで時間がかかっているのでしょうか?
> >
> > > 私もそう思います。普通のhtmlファイルは、画像ファイルも含めて、普通に表示出来ているのですよね。
> > > WEB PATIOのpatio/img/*.gifは、cgi-binのディレクトリの下に存在しているのでしょうか?
> >
> > というより、どのディレクトリでもCGIを実行出来るようにしています。
> > 普通のhtmlやSSIファイル、PHPなどは正常に表示出来ていて、CGI(Perl)のみが遅い状態です。
>
> CGI(Perl)を通じてアクセスされる画像ファイルに直接アクセスして見てください。
> 7)http://プライベートアドレス/cgi-bin/patio/img/*.gif
> それで遅ければ、cgi-bin以外のディレクトリに設置場所を変更して、直接アクセスして見てください。
> 8)http://プライベートアドレス/img/*.gif
画像ファイルは全く遅くないです。
一応確認してみましたが、速度的には5MB/sec程度は出ています。

サーバー側の/etc/hostsに、適当に
192.168.1.20 client1.example.com
とか追加すると、反応速度の遅さは改善しました。
やはり、DNS関係では無く、ホスト取得で問題が発生していた模様です。

色々ありがとう御座いました。


/etc/hosts にクライアントを。

No.17835 投稿時間:2004年11月29日(Mon) 08:45 投稿者名:松元 URL:

とりあえず /etc/hosts にクライアントを登録してみて。


$gethostbyaddrは?

No.17836 投稿時間:2004年11月29日(Mon) 09:36 投稿者名:ハル URL:

雰囲気からして逆引きまわりでしょうね。
スクリプトを設置した事がないので違うかも知れませんが、
init.cgiの182行目辺りの
$gethostbyaddr
を1に設定していませんでしょうか?


/etc/hostsに追加してみると、見事に解決しました。

No.17847 投稿時間:2004年11月30日(Tue) 01:47 投稿者名:Tomato URL:

お返事有難う御座います。

>松元さん
/etc/hostsに追加してみると、見事に解決しました。
ありがとう御座いました。

>ハルさん
$gethostbyaddrは0に設定しています。

有難う御座いました。


逆引きの問題らしい。

No.17850 投稿時間:2004年11月30日(Tue) 09:08 投稿者名:松元 URL:

逆引きは正しく出来るのでしょうか
nameserver や defalt gateway はルーターのアドレスを入れましたか?
nameserver はルーターよりISPのDNSの方がベターでしょう。
dig -x 203.212.55.105
dig -x 192.168.1.3
などですぐに答えを返しますか?


|目次|掲示板|過去ログ目次|▲頁先頭|