web-dev-qa-db-ja.com

java.lang.IllegalStateException:リクエストを実行できません。 I / Oリアクターのステータス:STOPPED

5分以上のリクエスト/分でリクエストを実行すると予想されるサービスがあります。このサービスは、Apache AsyncHttpClientに依存しています。数分おきに、クライアントは何らかの条件に達してJava.lang.IllegalStateException:リクエストを実行できません。 I/Oリアクターのステータス:STOPPED。クライアントへのすべての要求は、同じ例外メッセージで失敗し始めます。サービスが再開された後、このサイクルが繰り返されます。

リクエストの実行が失敗しても、AsyncResponseのfailed()メソッドへのコールバックが発生しないため、この問題をデバッグするのは本当に困難です。

私が収集できたことから、4.3で同様の問題を解決する修正が HTTPCORE-37HttpCore NIOにありました。 2。次のバージョンを使用しています-

commons-httpclient-3.1.jar
httpasyncclient-4.1.1.jar
httpcore-4.4.4.jar
httpcore-nio-4.4.4.jar

まだこの問題を見ています。

14
knash

私は自分のアプリケーションでこれと同じ例外を扱ってきましたが、最終的にこの投稿から役立つ提案を見つけました- http://httpcomponents.10934.n7.nabble.com/IO-reactor-status-STOPPED- td29059.html

I/Oリアクターの#getAuditLog()メソッドを使用して、どの例外が原因で終了したかを正確に調べることができます。

ConnectionManagerのIOReactorへの参照を保持している場合は、このメソッドを呼び出して実際の問題を洞察できます。

http://hc.Apache.org/httpcomponents-core-4.4.x/httpcore-nio/apidocs/org/Apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.html#getAuditLog()

私は自分のコードで信じられないほど愚かなことをしていたことがわかりました。しかし、私は監査ログを読むまで、それを理解することができませんでした。

5
Madpony

この前にOutOfMemoryErrorが表示された場合は、これを試してください

-XX:MaxDirectMemorySize=512M

参照 https://issues.Apache.org/jira/browse/HTTPASYNC-104

1
Kalpesh Soni