[リストへもどる]
一括表示
タイトルapache2.2について
記事No8178
投稿日: 2010/04/29(Thu) 15:14
投稿者クワトロ
おやじ様
お世話になります。

現在、windows server 2008(以下A)にcygwin1.7を入れて、
cygwinとともにインストールされたapache2.2.6とperlで、
ファイルをアップロード、ダウンロード等するプログラムを
動かすテストをしております。
プログラム自体は、フリーのものであり、そのプログラムを、
レンタルサーバー(以下B)上に配置して動作させております。
Bの環境は、turbolinux10+apache2.0
(詳細は、確認します。)
です。
B上では、かれこれ2年近く問題なく動いてるのですが、このたび上記のcygwin環境で同じプログラムを動かすと
下記の問題があります。
1.httpd2プロセスが増加する。
A上で、apacheを起動すると、httpd2プロセスが6個生成されるのですが、URLでAにアクセスして、アップロード等を繰り返すとその操作の回数に応じた数のhttpd2プロセスが生成されます。
ちなみに、Aのcygwinにはapache1.3.33も入っており、このapacheを起動して、Aにアクセスすると、httpdプロセスは増加しません。
apache2.2系でプロセスが増加することは正常といえるのでしょうか?
(何をもって正常と言えるのか、ということもありますが・・)
2.操作を繰り返すとレスポンスがなくなる。
apache2.2を起動してAにアクセスしてからアップロード等の操作をくりかえすと、
httpd2プロセスが増加していくのですが、最後に操作してから、
httpd.confで指定しているtimeout(180)を過ぎると、
apacheのerror_logファイルに、
warn(125) Cannot assign requested address: connect to listener on 0.0.0.0:80
というログが1秒おきに出力されてしまい、その後の操作を受け付けなくなる。
apache1.3.33を起動した場合は、ワーニングが出力されることがありません。
3.keepaliveをonにするとIEのプログレスバーの進み方が遅く、
レスポンスが悪い。
現在はhttpd.confのkeepaliveをoffにしてますが、
onにするととたんに反応が遅くなります。しかし、たとえば、1回アップロード操作(ただアップロードボタンを押すだけ)したのちに、アップロードのレスポンス待ちのときにもう一度同じ操作をすると、すぐにレスポンスが返るという現象です。
以上のような問題に遭遇しております。
3.については、とりあえずkeepaliveをoffにすればレスポンスが向上するのですが、特に2.については原因がわかりません。
httpd.confの記載が悪いのか、Aに問題があるのか。
Bではプログラムが動いていて、特に問題がないようなので、プログラムの問題ではないと考えてます。
ワーニングのメッセージをググって調べてみて、Listenを0.0.0.0:80にしましたが変わりませんでした。
まことに恐れいりますが、上記のような内容から確認すべき事項が
あれば教えていただけないでしょうか?

apache2.2を使うことを前提にしてます。
というのも、apache2.2にはsslがセットになっていたからで、
apache1.3にsslのみ追加でインストールする方法がわかれば
apache1.3でもよいとも思ってます。
お手数おかけしますが、ご協力願えますでしょうか?
よろしくお願いします。

タイトルセッションが切れていないように見えます。
記事No8179
投稿日: 2010/04/29(Thu) 18:19
投稿者おやじ
> 現在、windows server 2008(以下A)にcygwin1.7を入れて、
> cygwinとともにインストールされたapache2.2.6とperlで、
> ファイルをアップロード、ダウンロード等するプログラムを
> 動かすテストをしております。
> プログラム自体は、フリーのものであり、そのプログラムを、
> レンタルサーバー(以下B)上に配置して動作させております。
> Bの環境は、turbolinux10+apache2.0
> (詳細は、確認します。)
> です。
> B上では、かれこれ2年近く問題なく動いてるのですが、このたび上記のcygwin環境で同じプログラムを動かすと
> 下記の問題があります。
> 1.httpd2プロセスが増加する。
> A上で、apacheを起動すると、httpd2プロセスが6個生成されるのですが、URLでAにアクセスして、アップロード等を繰り返すとその操作の回数に応じた数のhttpd2プロセスが生成されます。
> ちなみに、Aのcygwinにはapache1.3.33も入っており、このapacheを起動して、Aにアクセスすると、httpdプロセスは増加しません。
> apache2.2系でプロセスが増加することは正常といえるのでしょうか?
> (何をもって正常と言えるのか、ということもありますが・・)
> 2.操作を繰り返すとレスポンスがなくなる。
> apache2.2を起動してAにアクセスしてからアップロード等の操作をくりかえすと、
> httpd2プロセスが増加していくのですが、最後に操作してから、
> httpd.confで指定しているtimeout(180)を過ぎると、
> apacheのerror_logファイルに、
> warn(125) Cannot assign requested address: connect to listener on 0.0.0.0:80
> というログが1秒おきに出力されてしまい、その後の操作を受け付けなくなる。
> apache1.3.33を起動した場合は、ワーニングが出力されることがありません。
> 3.keepaliveをonにするとIEのプログレスバーの進み方が遅く、
> レスポンスが悪い。
> 現在はhttpd.confのkeepaliveをoffにしてますが、
> onにするととたんに反応が遅くなります。しかし、たとえば、1回アップロード操作(ただアップロードボタンを押すだけ)したのちに、アップロードのレスポンス待ちのときにもう一度同じ操作をすると、すぐにレスポンスが返るという現象です。
> 以上のような問題に遭遇しております。
> 3.については、とりあえずkeepaliveをoffにすればレスポンスが向上するのですが、特に2.については原因がわかりません。
> httpd.confの記載が悪いのか、Aに問題があるのか。
> Bではプログラムが動いていて、特に問題がないようなので、プログラムの問題ではないと考えてます。
> ワーニングのメッセージをググって調べてみて、Listenを0.0.0.0:80にしましたが変わりませんでした。
> まことに恐れいりますが、上記のような内容から確認すべき事項が
> あれば教えていただけないでしょうか?
>

cygwinのapache(2.2)は使ったことがないため、デフォルトがどうなっているのかわかりませんが、linuxやWindows版からの想定でコメントします。
この手のトラブルはパケットをキャプチャすればかなり状況がわかると思いますので、是非キャプチャすることを薦めます。
状況からすると恐らくセッションがチャント切れていないのではないでしょうか? 切れない原因がプログラムなのか? cygwinのapache2.2が原因かはわかりませんが? 後者の可能性もあるのでできれば本来の環境に近いものでテストすべきと思います。
設定関係では下記が参考になると思いますが、アップロードしているだけでガンガン同時負荷をかけていないなら、上記の状況からは設定の問題ではないと思います。

http://www.atmarkit.co.jp/flinux/rensai/apache16/apache16b.html

因みに、エラーはセッションが切れないのでリソースが無くなって新たなリクエストを受けられなくなっているから出ているので、Listenは全く関係ないです。そもそも何も設定しなければ、Listenのデフォルトは0.0.0.0:80ですから。

タイトルRe: セッションが切れていないように見えます。
記事No8180
投稿日: 2010/04/29(Thu) 21:43
投稿者クワトロ
> cygwinのapache(2.2)は使ったことがないため、デフォルトがどうなっているのかわかりませんが、linuxやWindows版からの想定でコメントします。
> この手のトラブルはパケットをキャプチャすればかなり状況がわかると思いますので、是非キャプチャすることを薦めます。
> 状況からすると恐らくセッションがチャント切れていないのではないでしょうか? 切れない原因がプログラムなのか? cygwinのapache2.2が原因かはわかりませんが? 後者の可能性もあるのでできれば本来の環境に近いものでテストすべきと思います。
> 設定関係では下記が参考になると思いますが、アップロードしているだけでガンガン同時負荷をかけていないなら、上記の状況からは設定の問題ではないと思います。
>
> http://www.atmarkit.co.jp/flinux/rensai/apache16/apache16b.html
>
> 因みに、エラーはセッションが切れないのでリソースが無くなって新たなリクエストを受けられなくなっているから出ているので、Listenは全く関係ないです。そもそも何も設定しなければ、Listenのデフォルトは0.0.0.0:80ですから。

ご返事ありがとうございます。
プログラムの問題かどうかを判断するために、別のフリーのプログラムを動かしてみようと思います。
それと、今のプログラムでも、例えばアップロードを1回するだけ等、httpd2プロセスが比較的少ない場合には、
最後の操作からtimeoutを過ぎてもワーニングが出ません。
httpd2プロセスが10以上くらいになると、ブラウザを閉じる等、
セッションが切れてると思われる状況でtimeoutを過ぎると、
ワーニングが出ます。
何かパケットキャプチャツールを使って確認してみます。
他にアドバイスがあれば何でもお願いします。

タイトルRe^2: セッションが切れていないように見えます。
記事No8181
投稿日: 2010/04/30(Fri) 19:05
投稿者クワトロ
おやじ様
お世話になります。
先に聞いておくべきと思いましたが、
パケットキャプチャでは、何がどうなっているのを確認すればよいのでしょうか?

タイトル他kンテンツを見てください
記事No8182
投稿日: 2010/04/30(Fri) 20:22
投稿者おやじ
> おやじ様
> お世話になります。
> 先に聞いておくべきと思いましたが、
> パケットキャプチャでは、何がどうなっているのを確認すればよいのでしょうか?

FTPの例ですが、下記を見てください。HTTPなら制御コネクション相当です。

http://www.aconus.com/~oyaji/router/tcp.htm

タイトルRe: 他kンテンツを見てください
記事No8183
投稿日: 2010/05/02(Sun) 17:26
投稿者クワトロ
ありがとうございます。
参考にして確認してみます。
レンタルサーバーの環境は以下でした。
Turbolinux Server 10.0
Apache/2.0.51
perl, v5.8.5

タイトルRe^2: 他kンテンツを見てください
記事No8186
投稿日: 2010/05/08(Sat) 10:39
投稿者クワトロ
クライアントPCにwiresharkを入れてみました。
サーバーでapacheを起動してアクセスすると、「FIN」というのが出るときとでないときがあるみたいです。
試しにapacheのTimeoutを60にすると、たぶん1分でセッションが切れると思うのですが、アップロード等の操作をすると遅くとも1分以内にはFINがでるようです。
なので、セッションがうまく切れてないというおやじ様の見解は当たっていると思いました。
しかし、その原因がわかりません。
レンタルサーバーにアクセスしたときと、自分のサーバーにアクセスしたときではHTTP1.0と1.1の差くらいしか見当たりませんでした。
サーバー側にもwiresharkを入れて確認しようと思います。
例えば、アップロード等perlプログラムを動かして、その動作が終了するとFINが必ず返るものなのでしょうか?
1つのリクエストに対して1つのFINが返るものと勝手に思っているのですが。。。

タイトルHTTP1.0と1.0の違いはこのケースでは重要な差です
記事No8187
投稿日: 2010/05/11(Tue) 05:30
投稿者おやじ
> クライアントPCにwiresharkを入れてみました。
> サーバーでapacheを起動してアクセスすると、「FIN」というのが出るときとでないときがあるみたいです。
> 試しにapacheのTimeoutを60にすると、たぶん1分でセッションが切れると思うのですが、アップロード等の操作をすると遅くとも1分以内にはFINがでるようです。
> なので、セッションがうまく切れてないというおやじ様の見解は当たっていると思いました。
> しかし、その原因がわかりません。
> レンタルサーバーにアクセスしたときと、自分のサーバーにアクセスしたときではHTTP1.0と1.1の差くらいしか見当たりませんでした。
> サーバー側にもwiresharkを入れて確認しようと思います。
> 例えば、アップロード等perlプログラムを動かして、その動作が終了するとFINが必ず返るものなのでしょうか?
> 1つのリクエストに対して1つのFINが返るものと勝手に思っているのですが。。。

「HTTP1.0と1.1の差くらい」とありますが、今回のケースではこれは結構重要なので、同じ環境でやらないと意味がないのでは?
下記をみてください。

http://www.cresc.co.jp/tech/java/Servlet_Tutorial/Lesson_36.htm

タイトルRe: HTTP1.0と1.0の違いはこのケースでは重要な差です
記事No8188
投稿日: 2010/05/13(Thu) 12:57
投稿者クワトロ
ありがとうございます。
その差を見つけることがやっとでした、という意味で、
「差くらい」という表現を使用しました。申し訳ありません。
自分のサーバーでhttp1.0でリクエストを受け付けるようにしたいのですが、どのようにすればよいのでしょうか?
downgradeというディレクティブがあるようなのですが、
ssl.confにこの記載があるだけで、httpd.confにはこの記載がありません。
sslでの使用を考えているのですが、ssl.confには、
#BrowserMatch ".*MSIE.*" \
# nokeepalive ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0
という記載をしております。
ですが、まずhttpでのアクセスで問題が発生しておりますので、
httpでのアクセスの問題を解決したいと思ってます。
downgradeの記載はhttpd.confに記載する場合、どの位置に記載すればよいのでしょうか?
また、1.0でリクエストを受ける別の方法があれば教えていただけないでしょうか?
よろしくお願いします。

タイトルRe^2: HTTP1.0と1.0の違いはこのケースでは重要な差です
記事No8189
投稿日: 2010/05/14(Fri) 18:17
投稿者クワトロ
追記です。
httpd.confに
BrowserMatch ".*MSIE.*" \
force-response-1.0
を記載して、IEでhttp1.1を使用しないようにすると、
リクエストとレスポンスが1.0になりました。
しかし、結果は同じで、IEのプログレスバーの進み具合が遅いです。
このことから、http1.0とhttp1.1の差ではないのではないかと思われます。
他にどの点に注意すべきかご指導願えますでしょうか?

タイトル環境をあわせるのが先では?
記事No8190
投稿日: 2010/05/15(Sat) 07:26
投稿者おやじ
> 追記です。
> httpd.confに
> BrowserMatch ".*MSIE.*" \
> force-response-1.0
> を記載して、IEでhttp1.1を使用しないようにすると、
> リクエストとレスポンスが1.0になりました。
> しかし、結果は同じで、IEのプログレスバーの進み具合が遅いです。
> このことから、http1.0とhttp1.1の差ではないのではないかと思われます。
> 他にどの点に注意すべきかご指導願えますでしょうか?

現象1:httpd.confのkeepaliveをoffにしてますが、onにするととたんに反応が遅くなります。
   KeepAlive On では、同一クライアントに対してコネクションを使い回すので、この現象はコネクションが開放されていないことを意味する。
現象2:warn(125) Cannot assign requested address: connect to listener on 0.0.0.0:80 がでる。
   このエラーはセッションが切れないのでリソースが無くなって新たなリクエストを受けられなくなっているから出ている。

ので、コネクション問題以外考えられません。
ところで、よくわからなくなってきたのですが、整理すると下記で合ってますか?

1.レンサバでは問題ない。
2.レンサバがHTTP1.0なので、テスト環境をHTTP1.1から1.0のダウングレードした。
3.テスト環境ではHTTP1.1でも1.0でもおかしい。

ですよね。
ということは、HTTP1.0は問題ではく、単にテスト環境あるはその環境で問題がでるアプリの問題のような気がするのですが?
本来の目的は、cygwin環境で動かすことですか? 恐らく違うと思うので、まずは環境をあわせることが先決ではないですか? 下手をするとcygwin環境のデバッグをしていることになっていませんか?
因みに、「アップロード等perlプログラムを動かして、その動作が終了するとFINが必ず返るものなのでしょうか?」との問いは「NO」です。
サーバからアップロードに対する結果を何かしら返す(アップロードOKというメッセージ等)と思いますが、これが正しく出ていればクライアントがいきなり「FIN,ACK」で切ってくることもあります。

タイトルRe: 環境をあわせるのが先では?
記事No8193
投稿日: 2010/05/17(Mon) 20:23
投稿者クワトロ
ありがとうございます。お手数おかけしております。
最初は、windows+apache+activeperlということで環境を整えていたのですが、
動かす予定のperlプログラム内にactiveperlには実装されていない関数があり、
上記の環境では動かないことがわかったので、cygwinでapache+perlを動かすことになりました。
また、windowsではベーシック認証することができないようでしたので、
(正確には違いますが)
cygwinを使うことにしました。
(Linuxをインストールすることは考えておりませんでした。)
おやじ様のHPを参考にapache2.0.63を入れてみましたが、
これもapache2.2.6と同じような結果となりました。
おやじ様のおっしゃる通り、環境の問題(cygwinの問題)のように思います。
perlアプリは、フリーの別のperlCGIを動かしても同じ現象になるため、
perlアプリ自体は問題がないと考えます。
apache1.3を起動した場合とapache2.2を起動した場合で、
パケットフィルタリングの差を確認してみます。

タイトルRe^2: 環境をあわせるのが先では?
記事No8194
投稿日: 2010/05/20(Thu) 20:00
投稿者クワトロ
apache1.3と2.2での差は見当たりませんでした。
そこで、apache2.0を入れてみましたが、2.2と同じでした。
現在1.3系を別途インストールして試してるのですが、
httpd.confやら、ファイルやフォルダの体系が
参考にしたHPと異なるので、apacheを起動できてません。
調整後報告します。

タイトルRe^3: 環境をあわせるのが先では?
記事No8195
投稿日: 2010/05/24(Mon) 19:53
投稿者クワトロ
apache1.3.39のconfファイル中のパスをエラー通りに修正すると、
apache+sslで起動することができました。
アクセスしてもapache2.0系と違い、さっくり動きます。
ただ、confをファイルを2か所に配置しないとapachectl startssl
でファイルが見つからないとエラーになってしまうのが謎ですが・・。
cygwin+apache2.0でバグがあったんじゃないかという結論にします。
apache2.0のconfigureでworkerを指定しても、threadsをenableにしてもworkerにならなかったのでそういう結論にしました。
お世話になりました。