Sun JVM 故障排除工具和技巧

Sun JVM 故障排除工具和技巧

我们在 Sun JVM 1.6.0_11 版本上运行一组 ColdFusion 8 服务器。有时,服务器会停止响应请求。到目前为止,我们已经确定 JVM 已锁定,并且 ColdFusion 和 IIS 都不是问题的根源。我已将我们的 JVM 参数包含在下方。我们应该查看其他 JVM 设置吗?是否有任何工具可以监视、跟踪或从 JVM 内部获取指标,以便我们了解崩溃发生时它在做什么?还有其他 JVM 故障排除技巧吗?

-server
-Xms1024m
-Xmx1024m
-Dsun.io.useCanonCaches=false
-XX:MaxPermSize=256m
-XX:PermSize=256m
-XX:+UseParallelGC
-Dsun.rmi.dgc.client.gcInterval=300000
-Dsun.rmi.dgc.server.gcInterval=300000
-Djmx.invoke.getters=true

答案1

如果你使用的是 Linux,你可以使用 kill -3 来获取线程转储,并使用以下方法查找死锁:线程转储分析器

可视化虚拟机现在作为 JDK 的一部分提供,可以用来监视内存使用情况、线程,还包括一个分析器。

地图可用于从 Java 进程获取堆直方图和堆转储。然后,您可以使用类似Eclipse 内存分析器去调查它。

正如另一个答案所提到的,您可以研究 JMX 和 JConsole。对于我们应用程序中的每个服务,我们都有一个 MBean,因此我们可以查看关键统计信息(例如队列大小),以检查是否有任何异常。

答案2

这是我的配置的标准选项:

-XX:+HeapDumpOnOutOfMemoryError 

我还使用 SNMP/RRD 监控基本的 JVM 健康特性(比如堆大小、线程数)......还有更多。

然后,还有像 jconsole 这样的整个工具世界……

答案3

你需要调查JMX 监控- 它可以让您深入了解 JVM 内部发生的情况。

首先,将 -Dcom.sun.management.jmxremote.port=portNun 添加到上面的列表中。然后,在另一台机器上,运行 jconsole 并告诉它连接到上面指定的机器和端口。随意查看一下,看看哪些线程正在运行,以及在它停止响应请求后发生了什么。

答案4

您可以使用 jstat 查看堆的使用情况。

jstat -gc -h10 -t 1000

相关内容