如何为 Java 1.4 应用程序收集分析信息?

Posted

技术标签:

【中文标题】如何为 Java 1.4 应用程序收集分析信息?【英文标题】:How to gather profiling information for a Java 1.4 application? 【发布时间】:2009-07-29 19:16:59 【问题描述】:

我支持的在 JRE 1.4.2_12 上运行的 Java 应用程序每晚都在午夜时分挂起。我想尝试记录尽可能多的分析信息,以发现 JVM 中或应用程序外部是否存在问题。

我想使用 HPROF 收集尽可能多的信息。

    有没有办法让 HPROF 每分钟而不是在 JVM 终止时转储其 cpu 样本和内存分配报告? 是否有其他更合适的分析器可以收集此类信息?

【问题讨论】:

【参考方案1】:

我不会依赖转储文件,而是尝试将探查器连接到 VM 并保持连接状态,直到挂起。然后使用分析器来内省线程的状态。

这里使用 Java 1.4 是一个小问题,因为 1.4 的调试接口不是很好,但一些分析器仍然支持它。我特别推荐YourKit,它是商业的,但提供评估许可证。这是我用过的最好的分析器,但有一些余量。

【讨论】:

YourKit 是一款出色的分析器——我们已经使用它取得了巨大的成功。你也可以尝试使用 Eclipse 进行远程调试会话,如果你能弄清楚如何重现错误(即通过将服务器的时间设置为午夜?) @Thorbjørn:调试器、分析器、土豆、番茄......这里有一些重叠。不过,分析器会提供更多关于线程状态的数据,即使它没有告诉您正在执行哪些代码。【参考方案2】:

首先要做的事情是:您是否在应用程序挂起时分析了线程转储?很多时候有足够的信息来解决挂起的 Java 应用程序......

Ctrl-Break 在 Windows 上的进程窗口中,或kill -QUIT [pid] 在 Linux 上。

【讨论】:

你能建议一种方法来自动每 60 秒发送一次 Ctrl-Break 信号吗?这样我就不必每晚熬夜到凌晨 2 点来测试它。 刚刚设置一个作业来运行一个循环一个小时左右的脚本? 但是如何将 Ctrl-Break 发送到 Windows 进程? 我不知道你的应用程序的细节,但如果你可以从命令行运行它,如果它在半夜挂起,那么你可以直接 ctrl-break 它明天早上。它仍然会被挂起:) 您应该能够使用AutoIt之类的方式按计划发送Ctrl-Break【参考方案3】:

我会首先尝试确定它是否真的是您的应用程序或其他东西。

盒子上是否还有其他应用程序,如果有,它们会在午夜左右运行任何批次。这可能是由于盒子上运行的其他东西或占用带宽而导致您的应用程序缺乏资源的情况。

这种情况总是如此还是最近才开始的。如果这是全新的,请查看整个盒子上发生的变化,而不仅仅是您自己的应用。

【讨论】:

还有几个人在这方面工作。由于它在客户现场,我们在任何特定日子都没有大量时间进行诊断,因此我们试图一次收集尽可能多的数据。

以上是关于如何为 Java 1.4 应用程序收集分析信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Java 剪辑使用 ID3 标记(音频文件详细信息和信息)

与AI结合的视频分析如何为视频监控提供更加有力的辅助功能?

如何为 Android 应用设置 Firebase 数据库安全规则

如何为带有应嵌入视图控制器的句子的文本文件制作 iOS Swift“应用内购买”托管内容 pkg 文件?

如何为自定义标记扫描收集器安排收集周期?

如何为员工创建内部知识库?