首页 > 解决方案 > Jetty 中 HttpChannel.handle 中的 IllegalStateException

问题描述

我的日志充满了这样的异常:

8884902 [qtp1075738627-4458] WARN  o.eclipse.jetty.server.HttpChannel - /upload 
java.lang.NullPointerException: null
78884902 [qtp1075738627-4458] WARN  o.e.j.u.t.strategy.EatWhatYouKill -  
java.lang.IllegalStateException: s=IDLE rs=COMPLETED os=ABORTED is=READY awp=false se=false i=false al=0
        at org.eclipse.jetty.server.HttpChannelState.unhandle(HttpChannelState.java:416)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:538)

即使系统似乎工作正常。有点担心“正常”操作将包括大量此类日志。我找不到其他人得到这样的例外。这都是在当前版本的 Jetty 上,带有 Spring Boot 2.3.1 应用程序,使用 http2 连接器。它发生在应用程序中的几个不同的 URI 上,没有明确的模式。对此有什么想法吗?我不想接受有不间断的异常作为这个系统的正常行为。

查看 HttpChannelState 的源代码,我可以看到异常来自:

("s=%s i=%b a=%s",_state,_initial,_async);

但我无法进一步追踪这意味着什么。

标签: jettyhttp2

解决方案


您对 Servlet Async Processing 或 Servlet Async I/O 的使用可能是原因。

像这样中止的输出流也很奇怪。

的来源(在代码中)8884902 [qtp1075738627-4458] WARN o.eclipse.jetty.server.HttpChannel - /upload java.lang.NullPointerException: null

https://github.com/eclipse/jetty.project/blob/jetty-9.4.31.v20200723/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java#L600

但是为什么它没有堆栈跟踪也很奇怪。

您应该在 Eclipse Jetty 问题跟踪器https://github.com/eclipse/jetty.project/issues将此作为问题提交,并与我们一起找出问题的根源。

如果您可以足够容易地复制,那将使事情更容易排除故障。

由于您使用的是 HTTP2,因此请确保同时升级您的 Java 版本和 Eclipse Jetty。


推荐阅读