根据我今天的经验,即使被监视的JVM在OS中设置的进程亲和力有限,Oracle的Java VisualVM仍将CPU使用率显示为占整个计算机内核的百分比。这是在“监视”选项卡中。
将受监视的jvm限制为taskset
(在Linux,Ubuntu上),当允许该jvm的处理器在中的利用率接近100%时htop
,VisualVM中显示的cpu百分比显然等于cpus的总数除以允许的处理器数量。受监控的JVM。因此,秤的分辨率对于这种情况是不足的。
您能否确认您在其他操作系统上或总体上也观察到了同样的情况?
显示cpu使用情况时,是否有一种方法仅将VisualVM帐户用于关联性分配的核心?
根据VisualVM源代码,CPU使用率的确计算为总CPU时间除以处理器数量:
long processCpuTime = tracksProcessCpuTime ?
model.getProcessCpuTime() / processorsCount : -1;
其中processorsCount从获得OperatingSystemMXBean:
OperatingSystemMXBean osbean = mxbeans.getOperatingSystemMXBean();
if (osbean != null) processorsCount = osbean.getAvailableProcessors();
有一个长期存在的JVM错误JDK-6515172,未考虑进程亲和性,即,无论任务集如何,getAvailableProcessors始终返回CPU的总数。这是特定于Linux和BSD的;在Solaris和Windows上正常工作。
大约一个月前,此错误终于得到解决。但是,此修复程序仅适用于JDK 9。
查看此问题以获取可能的解决方法。他们虽然有些丑陋。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句