3

入力ストリームの読み取り中にJBOSSのすべてのスレッドがブロックされる問題があります。これは予測どおりに発生するわけではなく、システムが問題を起こし始めるまでに数日(またはそれ以上)実行される可能性があります。

問題はこの質問に似てい-Dhttp.keepAlive=falseますが、他の誰かが別の/より良い解決策を持っているかどうか疑問に思ったので、私はまだ答えで推奨されているように設定しようとはしていません。このプロパティをfalseに設定することでパフォーマンスが低下する必要はありません(問題が解決すると仮定します)。

BufferedReaderInputStream読書の問題について話しているSunのバグがいくつかありますが(バグ6192696バグ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

ServletこれがWebアプリケーションのコードです。それは立ち往生し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バージョン:JBossAS4.0.5.GA。
また、mod_jkポート80でHTTPリクエストをApacheサーバーからJBossサーバーにルーティングしています。

4

1 に答える 1

4

JkInputStream.receive は、基になる TCP ソケットからの読み取り中に何か問題が発生した場合、残念ながらが問題なのかを特定せずに、メッセージなしの IOException をスローします。org.apache パッケージのすべてのログ レベルを有効にし、例外がスローされる直前にログに記録された内容を確認すると、問題の原因の詳細がわかる場合があります。

于 2009-12-11T19:11:40.947 に答える