【问题标题】:Java VisualVM CPU usage and processor affinityJava VisualVM CPU 使用率和处理器亲和性
【发布时间】:2016-03-04 17:14:00
【问题描述】:

根据我今天的经验,我发现 Oracle 的 Java VisualVM 将 cpu 使用率显示为总机器内核数的百分比,即使被监控的 JVM 在操作系统中设置了有限的进程关联。这是在“监视器”选项卡中。

taskset限制被监控的jvm(在linux,Ubuntu上),当htop中允许该jvm的处理器利用率接近100%时,VisualVM中显示的cpu百分比显然等于cpu的总数除以被监控的 jvm 允许的处理器数量。因此,在这种情况下,比例尺的分辨率是不够的。

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

在显示 cpu 使用情况时,有没有办法让 VisualVM 仅对关联分配的核心进行说明?

【问题讨论】:

    标签: java jvisualvm


    【解决方案1】:

    根据VisualVM source code,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。

    查看this question 了解可能的解决方法。不过它们有点丑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多