Tomcat上的HTTP请求失败

时间:2010-12-15 16:53:56

标签: java tomcat garbage-collection

我的网络应用程序在Linux(CentOS)上的64位Java 6.0.23,Tomcat 6.0.29(带有Apache Portable Runtime 1.4.2)上运行。 Tomcat的JAVA_OPTS包括-Xincgc,它可以帮助防止长时间的垃圾收集。

该应用程序负载过重且出现间歇性故障,我想对其进行故障排除。

以下是症状:非常间歇性地,HTTP客户端将向Web应用程序发送HTTP请求并返回空响应。

该应用程序不使用数据库,因此它绝对不是JDBC连接的问题。所以我认为问题可能是:内存(可能是长垃圾收集),线程外或文件描述符之外。

我使用javamelody来查看正在使用的线程数,似乎maxThreads设置得足够高,不会耗尽线程。同样,我们将文件描述符的可用数量设置为一个非常高的数字。

该应用程序确实使用了大量内存。看起来内存可能是这里的罪魁祸首,还是有其他我可能会忽略的东西?

我想我的主要困惑是垃圾收集会导致HTTP请求失败的原因。直觉上,我猜想长时间的垃圾收集可能会导致HTTP请求花费很长时间才能运行,但我不认为长时间的垃圾收集会导致HTTP请求失败。


回应Jon Skeet评论的其他信息......

客户肯定没有超时。空响应发生得相当快。失败时,没有数据,也没有HTTP头。

1 个答案:

答案 0 :(得分:0)

我非常怀疑垃圾收集是造成这个问题的原因。

你真的真的需要找出这个“空响应”的确切内容:

  • 服务器是否只是断开连接?
  • 客户可能会超时吗?
  • 服务器是否提供有效的HTTP响应,但没有数据?

这些中的每一个都可以提供非常不同的方式来找出正在发生的事情。确定失败模式应该是您首要关注的问题,IMO。直到你知道这一点,这完全是猜测。