3

我正在 Red Hat 服务器上使用 Tomcat/Jetty 部署 Java SOAP servlet。我在另一台服务器上启动一个客户端,每秒发送 5 个请求。我的读取超时时间为 10 秒,请求平均需要 20 毫秒来处理。

但有时 1 小时后,Web 服务器永远不会响应请求。客户端记录 SocketTimeoutException : Read timed out。

  • 两台服务器上的平均负载、iowait 和内存使用率都很低。
  • 我调整了我的垃圾收集器,暂停时间非常短。
  • 我更改了缓冲区大小,但没有帮助。
  • 我的 SOAP 消息只有 300-500 个字符。
  • 我在另一台服务器上尝试过,它仍然发生。
  • Tomcat/Jetty 线程池未饱和。
  • 我尝试使用 Jetty 7、8 和 Tomcat 7。
  • 我没有看到容器记录的任何错误。
  • 我在 64 位上使用 Java 7 update 7。
  • 我正在使用属性 -Djava.net.preferIPv4Stack=true

我用 Wireshark 查看了 tcpdump,只有当它是 TCP 连接的第一个请求时才会出现问题。服务器确认所有数据包。当我降低 Keep-Alive 连接的数量时,问题会更频繁地发生。

似乎 Tomcat / Jetty 接受了连接,但它没有读取任何内容。我尝试读取超时 100 秒,但问题仍然存在。

你知道什么会导致这种情况吗?

4

0 回答 0