2016-03-04 81 views
8

根据我今天的经验,我发现Oracle的Java VisualVM显示cpu使用率占机器核心总数的百分比,即使受监视的JVM在OS中设置的进程亲缘关系有限也是如此。这在“监视器”选项卡中。Java VisualVM CPU使用率和处理器亲和力

限制与taskset(在Linux,Ubuntu的)中,当允许该JVM的处理器是接近100%的利用率在htop所监视的JVM中,在VisualVM的所示的CPU百分比显然等于CPU由分割总数监控的jvm允许的处理器数量。因此,该比例尺的分辨率不足。

你能否确认你在其他操作系统上或一般情况下观察到相同情况?

当显示cpu使用情况时,有没有一种方法可让VisualVM帐户仅显示亲和力分配的核心?

回答

5

根据VisualVM source code,CPU使用率确实计算为总CPU时间通过处理器的数量分为:

long processCpuTime = tracksProcessCpuTime ? 
     model.getProcessCpuTime()/processorsCount : -1; 

其中processorsCountOperatingSystemMXBean获得:

OperatingSystemMXBean osbean = mxbeans.getOperatingSystemMXBean(); 
    if (osbean != null) processorsCount = osbean.getAvailableProcessors(); 

有一个长期存在的JVM错误JDK-6515172,没有考虑进程相关性,即getAvailableProcessors总是返回CPU的总数,与任务集无关。这是针对Linux和BSD的;在Solaris和Windows上正常工作。

大约一个月前,这个bug已经终于解决了。但是,此修复程序仅适用于JDK 9.

请参阅this question了解可能的解决方法。虽然他们有些丑陋。