我有一个在Tomcat中运行的生产web应用程序(Struts,iBatis,Hibernate),它会在运行6-7天后在服务请求时挂起,但在执行线程转储后又可以正常运行。
我很难弄清楚为什么会这样。
我只是想知道其他人是否遇到过类似的事情。
发布于 2010-06-07 20:22:51
也许这会帮助你找到问题的原因。
我已经在tomcat上启用了JMX (在启动tomcat时设置这些可选的vm参数) -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=30188 (无论您希望jmx在哪个端口上运行-Dcom.sun.management.jmxremote.ssl=false tc) -Dcom.sun.management.jmxremote.ssl=false jmx
然后,我编写了一个小应用程序来监控内存使用情况(通过jmx),并在内存使用超过80%时通知我。
一旦有什么地方开始出错,我就会知道。然后我将获得内存中对象的直方图(有关如何获取直方图的信息,请参阅http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html )。
最后,我发现我的一个ejbQL查询导致了大量内存被使用。
希望这能在某种程度上有所帮助......
发布于 2010-02-17 16:29:20
首先,尝试在测试环境中重现这一点。您可以使用JMeter对应用程序进行压力测试。您可以使用-verbose:gc和-XX:+PrintGCDetails启动tomcat,这将使您更深入地了解GC运行时发生的情况。然后,当站点没有响应时,您可以获得线程转储,如果这解除了站点的阻塞,请查看GC详细信息以获取更多信息。
https://stackoverflow.com/questions/2279190
复制相似问题