【问题标题】:Best way to profile memory usage in a Java application?在 Java 应用程序中分析内存使用情况的最佳方法是什么?
【发布时间】:2010-10-19 21:41:00
【问题描述】:

我知道之前在 SO 上也有人问过类似的问题,但让我准确描述一下我需要做什么:

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

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

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

提前致谢。

【问题讨论】:

    标签: java memory profiling profile


    【解决方案1】:

    使用 JProfiler 之类的工具,您只需将某些参数添加到 JVM。它使用 JVMTI。

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

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

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

    【讨论】:

      【解决方案2】:

      Yourkit 也有一个不错的分析器

      【讨论】:

        【解决方案3】:

        你检查了吗

        VisualVMEclipse-Callisto?

        【讨论】:

          【解决方案4】:

          一个很好的起点是查看您的 JVM 是否支持“java -Xrunhprof”,因为这可以生成堆分析信息,而不会使您的场景更加复杂。

          http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html

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

          【讨论】:

            【解决方案5】:

            yourkit 等多个分析器具有用于跟踪内存分配的 API。这里的另一个选择是监控工具,例如jxinsightglassboxjamon

            对于分析堆转储,Eclipse Memory Analyzer 是您可以获得的最佳工具。它是免费和开源的,因此您可以根据需要自动分析堆转储。

            【讨论】:

              【解决方案6】:

              我在 Eclipse 中进行开发,但我身边有 Netbeans 可以使用其出色的 Profiler。与一些商业的相比,它是有限的,但仍然足以发现大多数瓶颈

              【讨论】:

              • netbeans 分析器已被放入带有 Java 6 u10 的 VisualVM 分析器中。非常好!
              【解决方案7】:

              您可以使用 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
               ...
              

              【讨论】:

              • 我得到:无法打开套接字文件:当我尝试这个时,目标进程没有响应或 HotSpot VM 没有加载
              【解决方案8】:

              除了上述答案之外,几年前我还喜欢使用 profiler。不知道有没有帮助。

              【讨论】:

                【解决方案9】:

                我推荐 dynaTrace 生产版。分析内存应用程序的惊人工具。低开销和 100% 的执行事务。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-02-19
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-04-22
                  相关资源
                  最近更新 更多