Grizzly 上的 java Web 应用程序 运行 偶尔出现 502 错误

Sporadic 502 errors from java web application running on Grizzly

我们的 Web 应用程序偶尔会出现 502 错误;我们可以通过多次重复相同的调用来重现此问题:在第 8 到第 12 次,它挂起约 30 秒,然后 returns 出现“502 代理错误”html.

我们通过登录一台受影响的机器并使用 curl 直接在 localhost:8080 上调用应用程序来排除这是 AWS 或 Apache 问题;经过一些调用,我们得到:

* Recv failure: Connection reset by peer
* stopped the pause stream!
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

查看应用程序日志,似乎有问题的调用从未到达应用程序(它们从未被记录)。

Web 应用程序基于 Java,使用 Grizzly 容器 (org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.25.1)。

编辑: 挂断电话的 30 秒持续时间似乎是 NetworkListenerkeepAlive 属性(https://javaee.github.io/grizzly/httpserverframework.html ).

编辑 2: 只有使用 AsyncResponse 重复调用 API 才能重现该问题;调用其他端点不会触发此行为。

可能是您的应用程序的连接或线程的并发问题,也许您正在打开许多到后端的连接,直到达到限制或者您的连接没有关闭线程。

已解决:升级到 Jersey 2.26 解决了问题,虽然我不明白为什么会这样。