- PR -

TomcatでHTTP504エラーの発生について

1
投稿者投稿内容
eisk
会議室デビュー日: 2004/03/09
投稿数: 4
投稿日時: 2007-08-16 16:16
お世話になっております。

現在、下記の環境でWebアプリケーションを運用しております。
OS:Redhat Linux 3.0ES
Java:JDK1.5
Tomcat:5.5.17
Apache:2.0.46
Apache+Tomcatコネクタ:MOD_JK2

先日から、たまにHTTP504エラーが発生しております。
現象としましては、
(1)ブラウザ(携帯サイトなので携帯からのアクセスです)から携帯サイトにアクセス
(2)Apacheがリクエストを受け取り、MOD_JK2経由でTomcatにリクエストをなげる
(3)Tomcatがリクエストを処理し、JSPにフォワード
(4)JSPがレスポンスを返す
(5)携帯にレスポンスが返ってこない
(6)タイムアウトになって504エラーが発生
という感じです。

リクエストを受け取ったTomcatが処理を行ったあと、JSPにフォワードしているのですが、
レスポンスが返ってきません。

そしてそのうち、タイムアウトになって504エラーが発生します。

この現象は、Tomcatを再起動すると発生しなくなり、しばらくすると(数時間から数十時間後)、発生します。

そして、また再起動すると発生しなくなります。

これの繰り返しです。

そこで、トラブルの原因はTomcatがアパッチに結果を返す際に何かしらのトラブルが起きているのではないかと考えています。

それが正しければ、犯人はMOD_JKになるのでは?っと思っています。

MOD_JKが犯人かどうかはあくまで私の私見ですが、もし解決方法をご存知の方がいらっしゃいましたら、ご教授いただけますと、幸いです。

よろしくお願いいたします。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-16 16:47
まずはログを見てみては。
eisk
会議室デビュー日: 2004/03/09
投稿数: 4
投稿日時: 2007-08-16 17:45
早速のお返事ありがとうございます。

アパッチのエラーログに下記のようなログが出ていました。

◆トラブル発生時のログ
[Thu Aug 16 08:39:37 2007] [error] channelApr.receive(): Error receiving message body -1 110
[Thu Aug 16 08:39:37 2007] [error] workerEnv.processCallbacks() Error reading reply
[Thu Aug 16 08:39:37 2007] [error] ajp13.service() ajpGetReply recoverable error 120000
[Thu Aug 16 08:39:37 2007] [notice] channelApr.open(): create tcp socket 165552928
[Thu Aug 16 08:39:37 2007] [notice] channelApr.receive(): Received len=125 type=4
[Thu Aug 16 08:39:37 2007] [notice] channelApr.receive(): Received len=108 type=3
[Thu Aug 16 08:39:37 2007] [notice] channelApr.receive(): Received len=2156 type=3
[Thu Aug 16 08:39:37 2007] [error] ajp13.service() ajpGetReply recoverable error 3
[Thu Aug 16 08:39:37 2007] [error] ajp13.service() Error forwarding ajp13:ドメイン名:8009 1 0
[Thu Aug 16 08:39:37 2007] [error] mod_jk2.handler() Error connecting to tomcat 3, status 200

◆正常時のログ
[Thu Aug 16 09:04:15 2007] [notice] channelApr.open(): create tcp socket 158498536
[Thu Aug 16 09:04:16 2007] [notice] channelApr.receive(): Received len=125 type=4
[Thu Aug 16 09:04:16 2007] [notice] channelApr.receive(): Received len=108 type=3
[Thu Aug 16 09:04:16 2007] [notice] channelApr.receive(): Received len=2156 type=3
[Thu Aug 16 09:04:16 2007] [notice] channelApr.receive(): Received len=2 type=5
[Thu Aug 16 09:04:17 2007] [notice] channelApr.open(): create tcp socket 158498536
[Thu Aug 16 09:04:17 2007] [notice] channelApr.receive(): Received len=139 type=4
[Thu Aug 16 09:04:17 2007] [notice] channelApr.receive(): Received len=456 type=3
[Thu Aug 16 09:04:17 2007] [notice] channelApr.receive(): Received len=2 type=5

トラブル発生時にはMOD_JKがエラーログを出しています。

調べてみますが、もしどういう意味かご存知でしたら、ご教授くださいませ。

よろしくお願いいたします。
syousuke
会議室デビュー日: 2002/09/27
投稿数: 19
投稿日時: 2007-08-18 01:04
mod_jk2って、結構昔に非サポートになってますよ。
特に使わなければならない理由がない場合、やはりmod_jkを使ったほうがよいのでは?

昔apacheとtomcatの接続って、mod_webappsとかmod_jk2とか出てましたけど結構不安定だった記憶があります。
まだ使っている人いるのかな?
使いにくくても、やっぱり一番昔からあるmod_jkが信頼性があるということででしょうか

小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-19 15:59
引用:

使いにくくても、やっぱり一番昔からあるmod_jkが信頼性があるということででしょうか


確か、mod_jk2がmod_jkに併合されたので開発が終了したと思います。
eisk
会議室デビュー日: 2004/03/09
投稿数: 4
投稿日時: 2007-08-19 18:15
お返事ありがとうございます。

MOD_JK2がサポート終了していたのは、知りませんでした・・・・
正直、お恥ずかしいです(T_T)

ですが、本掲示板にて有益な情報を得られましたので、大変助かりました。

早速、MOD_JKを使う形に変更いたします。

ご教授ありがとうございました。


一応、念のため、私なりに本件の解決案を掲載しておきます。
ただし、100%ではありません。

上記のトラブル回数が発生しにくくなりました。

◆対策内容

workers2.propertiesファイルの

[channel.socket:localhost:8009]

に下記を追加しました。

keepalive=1

デフォルトでは0ですが、1に設定を変更すると、コネクションを使いまわすような仕組みに切り替わるようです。
→理解がまだ浅いので間違っているかもしれません。
間違っている場合は、ご指摘いただければ幸いです。

この変更で発生回数がかなり減りました。

ですが、100%の解決ではないし、理解するための情報もネットには少ないので、
ご教授いただけた内容のとおり、MOD_JK使う形に変更いたします。

これで問題が発生しなければ、そのまま使いつづけることにします。

いろいろとありがとうございました。
1

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