【问题标题】:Java Sigar reporting memory usage that disagrees with Windows Resource MonitorJava Sigar 报告与 Windows 资源监视器不一致的内存使用情况
【发布时间】:2016-12-23 00:44:10
【问题描述】:

我已下载 Java Sigar API (http://support.hyperic.com/display/SIGAR/Home),并希望使用它来获取有关正在运行的不同进程的内存使用信息。

我编写了以下测试用例来报告 eclipse.exe 的内存使用情况:

import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.ptql.ProcessFinder;

public class SigarTest {
    public static void main(String[] args) throws SigarException {
        Sigar sigar = new Sigar();
        ProcessFinder find = new ProcessFinder(sigar);
        long pid = find.findSingleProcess("Exe.Name.ct=eclipse.exe");
        System.out.println(sigar.getProcMem(pid));
    }
}

执行此代码输出:

{PageFaults=3017940, Size=4125868032, Resident=608493568}

但是,查看 Windows 资源监视器,它显示了 eclipse.exe 的以下统计信息:

Commit (KB): 689,356
Working Set (KB): 594,028
Shareable (KB): 47,332
Private (KB): 546,696

请看以下截图:

Sigar 报告的 4.1GB 内存使用情况甚至与 Resource Monitor 报告的任何内存统计数据都不接近。

为什么这些距离这么远?

【问题讨论】:

  • 我对你的问题投了赞成票。我不知道为什么有人投了反对票!

标签: java sigar


【解决方案1】:

我相信我已经找到了自己问题的答案。 Sigar 正在报告虚拟大小(资源监视器中未包含的统计信息)。 Virtual Size 和 Commit Size 之间的区别解释可以在这里找到:Windows - Commit Size vs Virtual Size

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2016-08-14
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多