如何测量java程序中方法的cpu使用率[重复]

Posted

技术标签:

【中文标题】如何测量java程序中方法的cpu使用率[重复]【英文标题】:how to measure the cpu usage of a method within a java program [duplicate] 【发布时间】:2015-10-28 08:44:45 【问题描述】:

我想测量 Java 应用程序中的 CPU 使用率,例如

 System.out.println("...") 

HelloWorld 应用程序。任何的想法?我不想测量整个应用程序的 CPU 使用率,只测量应用程序内的方法。

有没有办法将应用程序的总执行时间与整个应用程序的 CPU 使用率关联起来?

【问题讨论】:

这个问题有点迟钝,因为一次执行的方法可能不止一个。我使用的分析方法是针对整个应用程序的使用而设计的。您可以看到评估一个方法需要多少时间,这可能与 CPU 使用率相关。 好的。一旦我测量了执行该方法的时间(例如System.out.println("...")),我如何将测量的时间与 CPU 使用率相关联? 您能否更新您的问题,说明您为什么要这样做?即使您在执行单个方法时可以看到 CPU 峰值可能是多少,但这不一定是对整个应用程序进行负载测试的有用数据点。 问题已更新。顺便说一句,有没有办法将应用程序的总执行时间与整个应用程序的 CPU 使用率关联起来? 您以完全错误的方式进行分析。测量应用程序的小“随机”部分是没有用的。您衡量整个应用程序的性能,这可能会为您提供“热点”,即需要最多资源的地方。为了提高性能,您将专注于热点。其他一切都只是噪音。比起衡量System.out.println(),你可以更好地把时间投入到其他事情上。 【参考方案1】:

在我看来,分析单个方法没有意义。因为a)很容易发现占用资源的方法(即,如果您必须遍历 10000 个输入值才能找到仅要输出的 100 个有效值,那么很明显您效率不高,并且在 9900 上浪费了 CPU 时间无用的迭代)和b)高效设计的关键是预见资源消耗,并且再次使用与a点相同的示例,由您作为设计师找到更有效的方法来解决问题,使用更精简和更快的数据结构或只是找到一种方法来修剪方法中的垃圾数据。

编辑:不,没有办法关联执行时间和 cpu 使用率,这要归功于 java JIT 以及它自主使用垃圾收集器的事实。

【讨论】:

以上是关于如何测量java程序中方法的cpu使用率[重复]的主要内容,如果未能解决你的问题,请参考以下文章

测量代码段的 Java 执行时间、内存使用和 CPU 负载

CUDA测量2个_syncthread()点之间的时间[重复]

测量使用预编译库(C++、Linux)的程序的总 CPU 时间

如何在负载测试期间测量 CPU 和内存

Java中的时间测量开销

如何测量 C 中任意函数调用使用的堆栈数量?