おじょろじょの、「河童の話は聞かないで。」

プログラムに関しての覚え書きや、仕事のぼやきなど。。

あるWEBサービスで頻発していたログ【警告: processCallbacks status 2】とか、なんとやら。

環境/tomcat5.5・jre1.5

頻発しているログ、

org.apache.jk.common.ChannelSocket processConnection

警告: processCallbacks status 2

.......

原因:

想定を超えたリクエストをサーバ側に送信した事によって、コンテナのアプリケーションが処理できず、リクエストの処理中にサーブレットゲートウェイタイムアウト時間に達し、接続が切断された為。

 

対策:

server.xmlのconnectionTimeoutを増やす。(レスポンス返却した後で接続先との接続を切断する時間)
現在の設定は20000ミリ秒
デフォルトは60000ミリ秒
デフォルトに戻してみる(後日、サーバーアプリが稼働していない時に。。)

 

多分その影響からか、もう一つ続けて出るログ、

org.apache.jk.core.MsgContext action

警告: Error sending end packet

java.net.SocketException: Broken pipe

java.net.SocketOutputStream.socketWrite0()

.......

以下、情報収集してみた

  1. Webブラウザでレスポンスが帰ってくる前に何度もSubmit。
  2. IEの問題らしい?Firefox出ない、Chrome出ない。
  3. java.net.SocketOutputStream.socketWrite0() とは、
    ソケットに対してデータを書き込むメソッド。この途中でパイプが切断(ソケットがクローズ)レスポンスをクライアント(ブラウザ)に送信している途中にブラウザを閉じるなど送信が不可能になったいうこと。大きなファイルをダウンロードしている途中でブラウザを終了させれば再現できる。
    (サーバーのメモリ不足や性能に依存する可能性)

 

確認:

コマンド「netstat -an」でサーバーの通信状況確認、stateで以下のステータス、「LISTEN」「ESTABLISHED」「CLOSING」「TIME_WAIT」「CLOSE」以外、「SYN_RECEIVED」があった場合、大量のパケットを送られている可能性がある。

 

結果:

なし

      むむむむ。。。