2009-12-11 24 views
3

我有導致JBOSS所有線程在讀取輸入流,以阻止有問題。它不可預測地發生,並且系統在開始遭受損失之前可以運行數天(或更長時間)。JBOSS掛在org.apache.jk.common.JkInputStream.receive() - IOException的讀取HTTP請求的InputStream

問題類似於this的問題,但我還沒有嘗試設置-Dhttp.keepAlive=false作爲答案建議,因爲我不知道其他人有不同的/更好的解決方案。我寧願不需要通過將此屬性設置爲false(假設甚至解決了問題)而導致性能下降。

有一些Sun的臭蟲談論BufferedReaderInputStream閱讀(bug 6192696,bug 6409506)問題,但對我來說他們似乎有點不確定。對於這樣的問題和Sun的錯誤,您的想法/建議/經驗值得歡迎。

這裏是例外:

java.io.IOException 
    at org.apache.jk.common.JkInputStream.receive(JkInputStream.java:190) 
    at org.apache.jk.common.JkInputStream.refillReadBuffer(JkInputStream.java:249) 
    at org.apache.jk.common.JkInputStream.doRead(JkInputStream.java:168) 
    at org.apache.coyote.Request.doRead(Request.java:418) 
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:284) 
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:404) 
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:299) 
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:192) 
    at com.vicinity.ExtractMessageServlet.service(ExtractMessageServlet.java:62) 
    ... 

這裏是請求頭的一個示例:

POST http: //www.xyz.com HTTP/1.0 
Host: www.xyz.com:80 
Accept: */* 
Content-Type: application/octet-stream 
Content-Length: 00597 
Session-Key: 812a0000 

下面是該web應用程序的Servlet代碼。它被卡住了servletInputStream.read

int lengthOfBuffer = request.getContentLength(); 
byte[] buffer = new byte[lengthOfBuffer]; 
ByteArrayOutputStream output = new ByteArrayOutputStream(lengthOfBuffer); 
ServletInputStream servletInputStream = request.getInputStream(); 
int readBytes = -1; 
while ((readBytes = servletInputStream.read(buffer, 0, lengthOfBuffer)) != -1) { 
    output.write(buffer, 0, readBytes); 
} 
byte[] inputStream = output.toByteArray(); 
... 
// Continue to process the input stream 

JBoss版本:JBoss AS 4.0.5.GA.
此外,mod_jk從Apache服務器的路由端口80上的HTTP請求到JBoss服務器 - 如果這就是興趣。

回答

4

如果從底層TCP套接字讀取時發生錯誤,JkInputStream.receive將拋出無消息的IOException,但不幸的是沒有指定錯在什麼地方。如果您啓用org.apache包中的所有日誌級別,並檢查哪些將記錄的異常被拋出之前您可能會發現問題原因的詳細信息。