Java分析:检测哪一段代码会导致CPU负载过高

问题描述:

我使用JProfiler和YourKit分析了我的代码。但是,我一直无法弄清楚如何检测哪一段代码负责高CPU负载。Java分析:检测哪一段代码会导致CPU负载过高

如果响应时间不好,检测热点很重要。在我的情况下,虽然响应时间不是问题。只是在处理这个特定请求的短时间内,CPU负载非常高(令人惊讶的高)。

我该如何针对哪些类别/方法引起这种情况?我想我正在寻找的是某种列表,它告诉我需要多少个CPU周期处理一个方法 - 或者这样。

+1

方法热点将是我会看的地方。你有什么理由不相信这个结果吗?当一个请求正在执行时,你不希望CPU达到100%(或至少一个整个内核)吗? – 2011-05-08 13:46:56

+0

是的,当然你是对的。测量CPU周期数和测量执行时间直接相关为[执行时间=(每个周期的周期数×时间)+ I/O等待时间]。 – 2011-05-08 20:31:01

CPU负载本质上指示CPU有什么需要做的CPU周期数,而不是仅仅是虚拟拇指。因此,如果你的请求真正做到了真正的工作(而不是等待磁盘I/O),那么可以预料,由于cpu需要做的事情,工作完成时负载会变高。

你需要寻找的东西是CPU周期不足,因为这是响应时间开始攀升。

如果您的问题在于请求太短以至于探查器无法向您显示需要查看的内容,请考虑使用自动化工具来请求它处理成千上万个请求。这应该有所帮助。

+1

“而不是只是在虚拟拇指”:) +1 – Eugene 2013-04-26 09:35:51

正在处理中,它是100%。在等待时(比如I/O),它在0%。中间没有。 当进程少于100%时,这是过去N毫秒的滚动平均值。

如果有办法让它更有效率,那会花费更少的时间,而不是更少的百分比(必然)。

如果你想找到一种方法,使其花费更少的时间,给它足够的工作量和try this