我意识到之前已经有人问过类似的问题,但让我准确描述一下我需要做什么:

我有一组运行命令行 java 应用程序的测试,我想向它们添加内存分析。我看到的一种选择是将代码(可能使用第三方工具/库)添加到我的应用程序中,以提供内存快照。另一种选择是使用第三方工具来为我管理/检测我的应用程序和 JVM(理想情况下不需要我更改代码)。我正在考虑类似 Valgrind 但针对 Java 的东西。如果可能的话也开源。

我真正想做的是设置内存测试,以便定期(比如说每秒)监视我的内存使用情况,并将其转储到文本文件中。这样我就可以看到内存使用量是否随着时间的推移而波动/增加/减少。我还能够计算最大和最小峰值。

这里有人做过这样的事吗?

提前致谢。

有帮助吗?

解决方案

使用像 JProfiler 这样的东西,您所需要做的就是向 JVM 添加某些参数。它使用 JVMTI。

我认为您应该阅读分析器以及它们到底能为您做什么。我还建议阅读 JVMTI。

JVMTM 工具接口 (JVM TI) 是一个供工具使用的新的本机编程接口。它提供了一种检查状态并控制在 Java 虚拟机 (JVM) 中运行的应用程序执行的方法。JVM TI 支持需要访问 JVM 状态的各种工具,包括但不限于:分析、调试、监控、线程分析和覆盖率分析工具。

笔记:JVM TI 取代了 Java 虚拟机分析器接口 (JVMPI) 和 Java 虚拟机调试接口 (JVMDI)。JVMPI 和 JVMDI 将在 J2SETM 的下一个主要版本中删除。

其他提示

Yourkit 还具有相当不错分析器

你检查过吗

视觉虚拟机日食-木卫四?

有一个良好的开端是,看看你的JVM支持的“java -Xrunhprof”,因为这会产生堆而不会使您的方案更为复杂的分析信息。

请参阅 http://docs.oracle.com/ JavaSE的/ 7 /文档/技术说明/样品/ hprof.html

您可能会发现,足以让你开始。

几个分析器,例如 你的工具包 有用于跟踪内存分配的 API。这里的另一个选择是监控工具,例如 精视或者 玻璃盒 或者 火腿

为了分析堆转储Eclipse 内存分析器 是您可以获得的最好的工具。它是免费且开源的,因此您可以根据需要自动分析堆转储。

我在Eclipse中开发,但我身边有Netbeans的使用以其优良的探查。相比,一些商业的,但对于大多数斑点仍然瓶颈不够好,它被限制

可以使用 JRCMD 这是一个命令行实用程序随附的JRockit JVM。如果你知道Java进程的PID,你可以这样做:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

和它会给你:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...

在除了上述的答案我也用探查器几年前享用。不知道有没有什么帮助。

我建议的dynaTrace生产版本。惊人的工具来分析内存的应用程序。低开销和执行的交易的100%。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top