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

时间:2018-10-25 15:31:13

标签: java http glassfish glassfish-3

我正在支持其他供应商的旧版应用程序。

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

症状是:

  • 向REST API发出HTTP请求
  • 应用程序具有自己的审核系统,这表明请求成功
  • GF日志中没有错误
  • GF访问日志记录了请求
  • 0个字节从请求返回给调用者

无论是远程调用还是在本地主机上使用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。进行此更改后,它又开始工作。

目前尚不清楚这是否以某种方式刷新或重置了某些内容,或者我是否有某种比赛状况。

1 个答案:

答案 0 :(得分:0)

明显的根本原因是运行这些服务的系统上的I / O高。这些应用程序通常使用50MB /秒的速度,一个新的过程将其使用速度提高到250MB /秒。解决I / O问题后,所有HTTP错误都会消失,而且不会再出现。