- PR -

Apache-Tomcat間のコネクションについて

1
投稿者投稿内容
未記入
会議室デビュー日: 2008/10/14
投稿数: 3
投稿日時: 2008-10-14 18:36
お世話になります。横溝と申します。

ご存知の方がいらっしゃいましたらご教授お願いします。
WEBサーバにApache、APサーバにTomcat、連携用コネクタとしてmod_jkがインストールされている環境でシステムが構築されています。この環境においてApache-Tomcat間のコネクションが消えない事象が発生しております。

環境は以下のようになっています。
-------------------------------------------
Apache:2.0.59
Tomcat:5.0.28
mod_jk:1.2.15

WEBサーバ(3台)
CPU:2.33GHz
メモリ:2.0GB
HDD:36GB
OS名 Red Hat Enterprise Linux ES release 4


APサーバ
CPU:1.6GHz
メモリ:2.0GB
HDD:36GB
OS名 Red Hat Enterprise Linux ES release 4
-------------------------------------------

WEBサーバは3台でロードバランシングされており、均等にアクセスを振り分けてAPサーバへ処理を送信しており、
Apache-Tomcat間の通信は8009ポートでAJP1.3プロトコルを使用しております。

Tomcatの設定ファイルserver.xmlの該当する箇所は以下の設定になっています。

<Connector port="8009"
useBodyEncodingForURI="true" maxThreads="512" minSpareThreads="50"
maxSpareThreads="100" acceptCount="100" enableLookups="false"
redirectPort="8443" debug="0" connectionTimeout="60000" protocol="AJP/1.3" />

またApacheの設定ファイルhttpd.confの設定は以下のようになっており、この設定がWEBサーバ3台で統一されています。
MaxClients数が150×3=450で、Tomcat側のmaxThreads="512"より小さい数値が設定されています。

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 100
</IfModule>


このような環境で、サーバへのアクセス集中などにより負荷がかかった状況において、ApacheとTomcat間でコネクションがMAX値の450件をフルに使いきり、さらに負荷がなくなった状況になって1時間以上経過しているにもかかわらずコネクションが消えない状態が長時間続く現象が発生しております。

APサーバにおいてnetstatコマンドでコネクションの状況を確認したところWEBサーバとの通信でESTABLISHED(接続中)の状態のものが450件ほど出力され続けておりました。

そのため、Apacheの再起動を行いコネクションを開放させたのですが、システムの運営上Apacheの再起動は行いたくはありません。
Apache再起動以外にこの現象を解決する設定や方法をご存知の方がいらっしゃいましたらご教授お願いいたします。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-10-14 19:31
状態がCLOSE_WAITなら、Linux環境で起きる問題っぽいですが、ESTABLISHEDだと違いそうですね。
未記入
会議室デビュー日: 2008/10/14
投稿数: 3
投稿日時: 2008-10-14 19:52
mio様 返信ありがとうございます。

申し訳ございません。状況の記載が不足しておりました。
Apacheを再起動した際の状況詳細です。

1.コネクションがMAX状態になっている。(コネクション状態:ESTABLISHEDのコネクションが残っている)
2.そのためWEBアクセスができない状態が続いていたためWEBサーバ3台のApacheを再起動。
3.コネクションの状態がmio様 返信ありがとうございます。

申し訳ございません。状況の記載が不足しておりました。
Apacheを再起動した際の状況詳細です。

1.コネクションがMAX状態になっている。(コネクション状態:ESTABLISHEDのコネクションが残っている)
2.そのためWEBアクセスができない状態が続いていたためWEBサーバ3台のApacheを再起動。
3.コネクションの状態がESTABLISHEDからCLOSE_WAITになる。(APサーバでCLOSE_WAITが残り続ける。)
4.WEBサーバでのコネクションの空きができたためWEBアクセス可能となる。
5.後日APサーバのコネクション状態を確認したがCLOSE_WAITの状態のコネクションがそのまま残り続けていた。
6.Tomcatの再起動を行ったところAPサーバのCLOSE_WAIT状態のコネクションが消えた。からCLOSE_WAITになる。(APサーバでCLOSE_WAITが残り続ける。)
4.WEBサーバでのコネクションの空きができたためWEBアクセス可能となる。
5.後日APサーバのコネクション状態を確認したがCLOSE_WAITの状態のコネクションがそのまま残り続けていた。
6.Tomcatの再起動を行ったところAPサーバのCLOSE_WAIT状態のコネクションが消えた。

このようにして場当たり的に対処したのですが、またシステムに高負荷がかかると同じ現象が発生すると思われるので、Apache,Tomcatの再起動なしにコネクションが残らないように対処したいのですが良い方法がございましたら回答を宜しくお願いします。
未記入
会議室デビュー日: 2008/10/14
投稿数: 3
投稿日時: 2008-10-15 11:32
お世話になっております。横溝です。

申し訳ございません。Tomcatのバージョンが誤っていました。
正しくは5.5.25を使用しておりました。

宜しくお願いします。
akasaka
常連さん
会議室デビュー日: 2008/06/17
投稿数: 22
投稿日時: 2008-10-16 04:00
jkstatus は?
1

スキルアップ/キャリアアップ(JOB@IT)