根据我今天的经验,我发现Oracle的Java VisualVM显示cpu使用率占总机器核心的百分比,即使受监控的JVM在操作系统中设置的进程关联性有限.这是在"监视器"选项卡中.
限制受监控的jvm taskset(在linux,Ubuntu上),当处理器允许jvm接近100%利用率时htop,VisualVM中显示的cpu百分比显然等于cpus的总数除以允许的处理器数量.监控jvm.因此,对于这种情况,比例的分辨率是不够的.
您能否确认您在其他操作系统或一般情况下观察到相同的情况?
在显示cpu使用情况时,有没有办法让VisualVM帐户只用于亲和力分配的核心?
根据VisualVM源代码,CPU使用率确实计算为总CPU时间除以处理器数量:
long processCpuTime = tracksProcessCpuTime ?
model.getProcessCpuTime() / processorsCount : -1;
Run Code Online (Sandbox Code Playgroud)
其中processorsCount是从OperatingSystemMXBean获得的:
OperatingSystemMXBean osbean = mxbeans.getOperatingSystemMXBean();
if (osbean != null) processorsCount = osbean.getAvailableProcessors();
Run Code Online (Sandbox Code Playgroud)
有一个长期存在的JVM错误JDK-6515172,没有考虑进程关联性,即getAvailableProcessors总是返回CPU的总数,而不管任务集.这是针对Linux和BSD的; 在Solaris和Windows上正常工作.
大约一个月前,这个bug终于解决了.但是,修复程序仅适用于JDK 9.
看看这个问题可能的解决方法.虽然它们有些难看.
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |