我们有一个生产Java系统,它比平时使用更多的线程。我想使用kill -3 pid
来获取线程转储,并且如果需要,可以使用JConsole在Eclipse MAT中获得二进制堆转储以进行离线分析。在生产系统上生成threaddump的安全性
我在RHEL4上运行Java 1.5.0_10。
这些中的任何一个会如何杀死JVM?在生产垃圾堆时,对它的性能有什么不利影响?
我们有一个生产Java系统,它比平时使用更多的线程。我想使用kill -3 pid
来获取线程转储,并且如果需要,可以使用JConsole在Eclipse MAT中获得二进制堆转储以进行离线分析。在生产系统上生成threaddump的安全性
我在RHEL4上运行Java 1.5.0_10。
这些中的任何一个会如何杀死JVM?在生产垃圾堆时,对它的性能有什么不利影响?
它不会杀死虚拟机,但生成堆转储可能会在转储过程中冻结JVM,因为它必须转储一致的快照。转储完成后,它将恢复所有挂起的线程。所以它不会有破坏性,但会暂时停止处理。
我用下面的命令来获得堆转储
JMAP -heap PID
详情 - http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
对不起,但没有回答这个问题 – keiki 2015-09-15 07:32:11
我假设线程转储是少了很多昂贵的生产比堆转储。它甚至需要暂停VM吗? – Rich 2010-12-16 13:17:27
@ Rich:很便宜,是的。它仍然需要暂停虚拟机,但它只需要很短的时间就不会注意到它。 – skaffman 2010-12-16 13:18:48
非常感谢:=) – Rich 2010-12-16 13:19:45