2

ジャージに埋め込まれた桟橋を使用しています。私のスタンドアロンの突堤はうまく機能しますが、しばらくするとアイドル状態になります。2ms以内に応答します。ただし、8000ミリ秒の応答を返し始めます。そしてアイドル。プロファイリングしましたが、何も見つかりませんでした。そのエラーが発生します:

java.lang.IllegalStateException: Committed
        at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1056)
        at org.eclipse.jetty.server.Response.sendError(Response.java:273)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:509)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
        at org.eclipse.jetty.server.Server.handle(Server.java:346)
        at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)
        at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1048)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:601)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214)
        at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
        at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:241)
        at org.eclipse.jetty.server.ssl.SslSocketConnector$SslConnectorEndPoint.run(SslSocketConnector.java:664)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:636)

スレッドプールの設定を変更するのにうんざりしていたので、次のようにしました。

 server.setThreadPool(new ExecutorThreadPool(64,256,10));

PS 1: https://groups.google.com/forum/#!msg/cometd-users/5yhMwIlRVbg/fL7V3mwWKyoJここでは、executer は jetty のスレッド プールとしては良くないと言っていますが、よくわかりません。

私が使用するのは、jetty-servlet と jetty-security の7.4.5.v20110725です。

PS 2: 次のことがわかりました: http://grepcode.com/file/repo1.maven.org/maven2/org.eclipse.jetty/jetty-server/8.0.0.M0/org/eclipse/jetty/server/Response .java#1103

何か案は?

4

1 に答える 1

0

おそらく手遅れであることはわかっていますが、JPOS に組み込まれた Jetty 8.x を使用して、自分でこれに遭遇しました。
テスト ハンドラーを作成し、HandlerCollection の下にすばやく構成しました。
HandlerCollection
...ContextHandler
...RequestLogHandler
... FunkyHandler

つまり、最後に実行されました。これを怒らせたのは:
java.lang. IllegalStateException: org.eclipse.jetty.server.handler の com.acs.test.jetty.FunkyHandler.handle(FunkyHandler.java:26) の org.eclipse.jetty.server.Response.getWriter(Response.java:699) の STREAM .HandlerCollection.handle(HandlerCollection.java:154) の org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) の org.eclipse.jetty.server.Server.handle(Server.java:365) )

OPと同じように、コミット済み状態エラーが発生したOutputStreamで試してみました。
したがって、これらのハンドラーが構成された順序で呼び出されることをどこかで読んだ後、修正は簡単でした {これはおそらく、コードでハンドラーをセットアップするときにも機能します}:
HandlerCollection
... FunkyHandler
...ContextHandler
... RequestLogHandler

私は Jetty のドキュメントを読んでいないので、どこかで言及されていると確信していますが、ここにあります。それが誰かに役立つことを願っています。

于 2012-11-29T07:54:42.447 に答える