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 にバージョンアップしたら改善した。



