Dec 26, 2008

[AS] Tomcat Native で不可思議なエラー

Apache HTTP Server + APR + Tomcat Native + Apache Tomcat 環境下で、特定条件の HTTP コネクションが途中で切れる現象が発生した。 結論から言うと Tomcat Native のバグの様で、Tomcat Native をバージョンアップしたら直った。 同様の症状が発生したという情報は見つかったが、解決したという情報が見当たらなかったのでメモ。

症状が発生した環境

  • Apache HTTP Server 2.2.6
  • Apache Portable Runtime 1.2.7-10
  • Apache Tomcat 5.5.25
  • Apache Tomcat Native 1.1.6

出力されたログ

/var/log/httpd/error_log

[error] (70014)End of file found: ajp_ilink_receive() can't receive header
[error] ajp_read_header: ajp_ilink_receive failed
[error] (120006)APR does not understand this error code: proxy: dialog to 127.0.0.1:8009 (localhost) failed

$CATALINA_HOME/logs/catalina.out

ClientAbortException:  java.io.IOException
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:366)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:291)
        at org.apache.catalina.connector.OutputBuffer.writeByte(OutputBuffer.java:414)
        at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:77)
        at java.io.FilterOutputStream.write(FilterOutputStream.java:60)
        at java.io.FilterOutputStream.write(FilterOutputStream.java:108)

    (SNIP)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:444)
        at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:472)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.io.IOException
        at org.apache.coyote.ajp.AjpAprProcessor.flush(AjpAprProcessor.java:1199)
        at org.apache.coyote.ajp.AjpAprProcessor$SocketOutputBuffer.doWrite(AjpAprProcessor.java:1284)
        at org.apache.coyote.Response.doWrite(Response.java:560)
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
        ... 26 more

解決策

Tomcat Native を 1.1.6 → 1.1.8 にバージョンアップしたら改善した。

Posted in AS | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |