0

我有一个运行 Tomcat6 的 Ubuntu LAMJ 服务器。

我的一个 JSP 应用程序每隔几天就会死机一次,我很难找出原因。我必须重新启动 tomcat 才能让那个应用程序再次运行,因为它不会自行恢复。我在我自己的 log4j 日志中没有得到该应用程序的任何内容,并且在 Catalina.out 中也看不到任何内容。

此应用程序通过 server.xml 文件中的上下文元素与另一个应用程序共享 javax.sql.DataSource 资源。我不认为这是问题的原因,但我不妨提一下。

谁能指出我正确的方向来找到这个间歇性问题的原因?

提前致谢,

克里斯蒂

4

1 回答 1

0

获取正在运行的服务器的线程转储 有两个选项

使用 VisualVM

在你的 %java_home%/bin 文件夹中会有一个名为 jvisualvm 的文件。运行它并连接到您的 tomcat 服务器。单击“线程”选项卡,然后单击“线程转储”

从命令行手动

打开命令行并找到您的tomcat的进程ID

ps -ef | grep java

一旦您确定了正在运行的 tomcat 实例的进程 ID,

kill -3 <pid>

在此处替换进程 ID。这会将您的线程转储发送到您的 tomcat 的标准输出。很可能是 catalina.out 文件。

编辑- 根据以下马克的评论:

将 3 个线程转储间隔约 10 秒并进行比较是正常的。它可以更轻松地查看哪些线程“卡住”以及哪些线程正在移动


一旦你有了线程转储,你就可以分析它是否有卡住的线程。可能不是线程卡住的问题,但至少你可以看到服务器内部发生了什么来进一步分析问题。

于 2012-04-11T12:40:23.913 回答