如何解释性能分析结果?

我使用NetBeans和VisualVM运行了内存分析器,并收到了结果,但没有线索如何分析其结果,我研究了这篇文章,但没有教导或提供关于如何解释结果的线索。

我也发现了这篇关于在Netbeans 4上解释结果的文章,但是我正在寻找一篇更详细的文章,或者一种解释以下结果的方法来学习。

在这里输入图像描述


您在问题中粘贴的遥测图中确实没有太多的信息。

传达的是什么

  • 您的程序已被监控约3分钟
  • 你的堆利用率略低于200MB(没有特别的)
  • 你有大约90个线程(这必须是一个应用程序服务器)
  • GC(平均)平均花费少于5%
  • 我敢打赌,在内存可视化器中传输的锯齿图案是您的程序启动 - 否则为什么事情似乎在最后一分钟左右平滑其他。 您的问题中显示的3分钟内您的应用程序是否承受过任何负载?

    作为一个起点,我会研究一下当你的程序做了一些繁重的工作时,你的程序花费了多少时间在GC(GC中的相对时间)上。 如果它超过5%,你可以考虑调整你的堆或进一步挖掘分配的位置。

    接下来我会寻找一个瓶颈。 找出应用程序花费大部分时间的位置,然后查看是否可以以某种方式优化代码。


    我不太了解netbeans中的profiler,但我更喜欢visualvm 。 它具有广泛的性能分析。 https://visualvm.java.net/

    VisualVM是一个集成了几个命令行JDK工具和轻量级分析功能的可视化工具。 专为生产和开发时间而设计,它进一步增强了Java SE平台的监控和性能分析能力

    内存测试的示例程序

    public class MemoryTest {
        public static void main(String[] args) {
            ArrayList<String> temp = new ArrayList<String>();
            for (int i = 0; i < 1000000; i++) {
                temp.add(String.valueOf(i));
                System.out.println("index:" + temp.get(i));
            }
            System.out.println(temp.size());
        }
    }
    

    打开visualvm 。 它会在左侧列出你的程序。 它会为您提供多种选项来测试您的程序对MemoryCPU 。 您也可以使用它来分析特定的软件包。

    在这里输入图像描述

    在这里输入图像描述


    这个入口不是特定于Netbeans 7,但是在JVM内存使用和分析基础方面确实有一些很好的简单入门者。 有时,对基础知识的更好理解揭示了更好的编程技术,以避免未来的内存问题。 http://java.dzone.com/articles/java-memory-model-simplified

    链接地址: http://www.djcxy.com/p/19905.html

    上一篇: How to interpret profiling results?

    下一篇: Garbage collection of String literals