Java 挂在org.apache.jk.common.JkInputStream.receive()上的JBOSS-IOException读取HTTP请求InputStream

Java 挂在org.apache.jk.common.JkInputStream.receive()上的JBOSS-IOException读取HTTP请求InputStream,java,jboss,inputstream,ioexception,bufferedinputstream,Java,Jboss,Inputstream,Ioexception,Bufferedinputstream,我有一个问题,导致JBOSS中的所有线程在读取输入流时阻塞。它不会发生在可预测的范围内,系统可以运行数天(或更长时间),然后才开始出现问题 这个问题看起来类似于问题,但我还没有尝试按照答案中的建议设置-Dhttp.keepAlive=false,因为我想知道是否还有其他人有不同/更好的解决方案。我宁愿不必通过将此属性设置为false(假设它甚至可以修复问题)而导致性能下降 有一些Sun bug讨论了BufferedReader和InputStream读取(,)的问题,但对我来说,它们似乎有点不确

我有一个问题,导致JBOSS中的所有线程在读取输入流时阻塞。它不会发生在可预测的范围内,系统可以运行数天(或更长时间),然后才开始出现问题

这个问题看起来类似于问题,但我还没有尝试按照答案中的建议设置
-Dhttp.keepAlive=false
,因为我想知道是否还有其他人有不同/更好的解决方案。我宁愿不必通过将此属性设置为false(假设它甚至可以修复问题)而导致性能下降

有一些Sun bug讨论了
BufferedReader
InputStream
读取(,)的问题,但对我来说,它们似乎有点不确定。欢迎您对此类问题和Sun bugs的想法/建议/经验

例外情况如下:

java.io.IOException
位于org.apache.jk.common.JkInputStream.receive(JkInputStream.java:190)
位于org.apache.jk.common.JkInputStream.refillReadBuffer(JkInputStream.java:249)
位于org.apache.jk.common.JkInputStream.doRead(JkInputStream.java:168)
在org.apache.coyote.Request.doRead(Request.java:418)
位于org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:284)
位于org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:404)
位于org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:299)
位于org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:192)
位于com.appearance.ExtractMessageServlet.service(ExtractMessageServlet.java:62)
...
以下是请求头的示例:

POST http://www.xyz.com http/1.0
主持人:www.xyz.com:80
接受:*/*
内容类型:应用程序/八位字节流
内容长度:00597
会话密钥:812a0000
下面是web应用程序的
Servlet
代码。它卡在
servletInputStream上。请阅读

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
正在将端口80上的HTTP请求从Apache服务器路由到JBoss服务器-如果有兴趣的话。

JkInputStream.receive将在从底层TCP套接字读取时出错时抛出无消息IOException,不幸的是,没有指定出错的原因。如果启用org.apache包的所有日志级别,并在引发异常之前检查记录的内容,您可能会发现有关问题原因的更多详细信息