我有一台运行Tomcat6的Ubuntu LAMJ服务器。
我的一个JSP应用程序每隔几天冻结一次,我无法弄清楚原因。我必须重新启动tomcat以重新启动那个应用程序,因为它不会自行回转。我在该应用程序的log4j日志中没有得到任何内容,也无法在Catalina.out中看到任何内容。
此应用程序通过server.xml文件中的context元素与另一个共享javax.sql.DataSource资源。我不认为这是问题的原因,但我不妨提一下。
有人能指出我正确的方向找到这个间歇性问题的原因吗?
提前感谢,
克里斯蒂
答案 0 :(得分:0)
获取正在运行的服务器的线程转储 有两个选项
使用VisualVM
在%java_home%/ bin文件夹中会有一个名为jvisualvm的文件。运行此命令并连接到您的tomcat服务器。单击“线程”选项卡,然后单击“线程转储”
从命令行手动
打开命令行并找到tomcat的进程ID
ps -ef | grep java
确定正在运行的tomcat实例的进程ID后,
kill -3 <pid>
在此处替换进程ID。这会将您的线程转储发送到tomcat的stdout。很可能是catalina.out文件。
编辑 - 根据Mark的评论如下:
将3个线程转储相隔约10秒并进行比较是正常的。它 使得更容易看到哪些线程被“卡住”以及哪些线程被“卡住” 正在移动
一旦你有线程转储,你可以分析它是否卡住线程。它可能不会成为线程问题,但至少你可以看到服务器内部发生了什么,以进一步分析问题。