我的网络应用程序在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头。
答案 0 :(得分:0)
我非常怀疑垃圾收集是造成这个问题的原因。
你真的真的需要找出这个“空响应”的确切内容:
这些中的每一个都可以提供非常不同的方式来找出正在发生的事情。确定失败模式应该是您首要关注的问题,IMO。直到你知道这一点,这完全是猜测。