Glassfish v3 上的 J2EE 应用 运行 未响应 HTTP 请求。应用程序记录成功但没有数据通过 HTTP 发回

J2EE app running on Glassfish v3 is not responding to HTTP requests. App logs success but no data sent back over HTTP

我正在支持另一个供应商的遗留应用程序。

这是一个在 Glassfish v3.1.2.2 上运行的 J2EE 应用程序。它有一个使用 JAX-RS 实现的 REST API。我对应用程序和来源的了解有限。

症状是:

远程调用和在本地主机上使用 curl 进行的调用都会发生这种情况。

如果我们通过 HTTPS 向不同的端口发出相同的请求,它们就会成功。我们不愿意在不知道根本原因的情况下将呼叫转移到另一个端口。这些昨晚间歇性地失败,现在今天不断地失败。

请求的抓包显示: - TCP overhead/handshake - 获取请求 - 从应用程序返回调用者的单个 ACK - 然后什么都没有

什么会导致 Glassfish v3 成功处理和处理 HTTP 请求但 return 没有数据?

Glassfish v3 中是否有刷新或重置 HTTP 侦听器及其关联线程池的机制?

由于这发生在同一台服务器上对本地主机的 curl 请求上,我想我可以排除网络问题。

正在使用的端口直接与 Glassfish 通信。调用者和应用服务器之间没有代理(如 Apache 或 Nginx)。

是否应该在 Glassfish 中启用日志记录或监视设置,以观察 HTTP 侦听器相对于应用程序和网络堆栈所做的事情?

我混淆了一些显示症状的示例:

Glassfish 访问日志:

"0:0:0:0:0:0:0:1" "NULL-AUTH-USER" "25/Oct/2018:11:21:02 -0500" "GET /api/obfuscated/by/me HTTP/1.1" 200 9002 

同一呼叫的卷曲响应:

*   Trying OFBBFUSCATED
* Connected to hostname.local (OFBBFUSCATED) port 11080 (#0)
> GET /api/obfuscated/by/me HTTP/1.1
> Host: hostname.local:11080
> User-Agent: curl/7.43.0
> Accept: */*
> Authorization: Basic asdfdsfsdfdsfsdafsdafsdafw==
>
* Empty reply from server
* Connection #0 to host hostname.local left intact

更新 我更改了 HTTP 网络侦听器的超时设置。我将它从 30 秒增加到 35 秒,因为我看到一个数据包捕获,其中应用程序在 30 秒后发送了 FIN。进行此更改后,它又开始工作了。

不清楚这是否以某种方式刷新或重置了某些东西,或者我是否遇到了某种竞争条件。

明显的根本原因是 I/O 在系统 运行 这些服务上。应用程序通常使用 50MB/秒,一个新进程将使用率提高到 250MB/秒。 I/O 问题解决后,所有 HTTP 错误都消失了,再也没有回来。