我正在支持其他供应商的旧版应用程序。
这是一个在Glassfish v3.1.2.2上运行的J2EE应用程序。它具有使用JAX-RS实现的REST API。我对应用程序和源的了解有限。
症状是:
无论是远程调用还是在本地主机上使用curl进行的调用,都会发生这种情况。
如果我们通过HTTPS向其他端口发出相同的请求,则它们将成功。我们不愿意在不知道根本原因的情况下将呼叫移至另一个端口。这些昨晚断断续续地失败了,而今天却不断失败。
请求的数据包捕获显示: -TCP开销/握手 -GET请求 -从应用程序返回到调用者的单个ACK -那之后什么都没有
什么会导致Glassfish v3成功处理和处理HTTP请求但不返回数据?
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。进行此更改后,它又开始工作。
目前尚不清楚这是否以某种方式刷新或重置了某些内容,或者我是否有某种比赛状况。
答案 0 :(得分:0)
明显的根本原因是运行这些服务的系统上的I / O高。这些应用程序通常使用50MB /秒的速度,一个新的过程将其使用速度提高到250MB /秒。解决I / O问题后,所有HTTP错误都会消失,而且不会再出现。