我支持的在 JRE 1.4.2_12 上运行的 Java 应用程序每晚都在午夜时分挂起。我想尝试记录尽可能多的分析信息,以发现 JVM 中或应用程序外部是否存在问题。
我想使用 HPROF 来收集尽可能多的信息。
- 有没有办法让 HPROF 每分钟而不是在 JVM 终止时转储其 cpu 样本和内存分配报告?
- 是否有一个不同的、更合适的分析器可以收集这样的信息?
我不会依赖转储文件,而是尝试将分析器连接到 VM 并保持连接状态,直到挂起。然后使用分析器来内省线程的状态。
Java 1.4 的使用在这里是一个小问题,因为 1.4 的调试接口不是很好,但一些分析器仍然支持它。我特别推荐YourKit,它是商业的,但提供评估许可证。这是我用过的最好的分析器,但有一些余量。
首先要做的事情是:您是否在应用程序挂起时分析了线程转储?很多时候有足够的信息来解决挂起的 Java 应用程序......
Ctrl-Break
在 Windows 或kill -QUIT [pid]
Linux 上的进程窗口中。
我会首先尝试确定它是否真的是您的应用程序或其他东西。
盒子上是否还有其他应用程序,如果有,它们会在午夜左右运行任何批次。这可能是由于盒子上运行的其他东西或占用带宽而导致您的应用程序缺乏资源的情况。
是一直如此还是最近才开始的。如果这是全新的,请查看整个盒子上发生的变化,而不仅仅是您自己的应用程序。