如何使用SIGAR库获取java进程的内存使用?

时间:2017-06-09 16:58:59

标签: java sigar

下面的过程是执行c ++代码。我想知道c ++代码使用的内存。

ProcessBuilder p = new ProcessBuilder("./" + compiledFile);
Process pp = p.start();
long id = getProcessID(pp);
Sigar sigar=new Sigar();
ProcMem memory=new ProcMem();
memory.gather(sigar, id);
System.out.println("memory ---> "+Long.toString(memory.getSize()));

我尝试了以下代码。但它返回了sigar异常:"没有这样的过程"。 要获取进程ID,我使用以下方法

public long getProcessID(Process p)
    {
        long pid = -1;
        try
        {
            if (p.getClass().getName().equals("java.lang.UNIXProcess")) 
            {
                Field f = p.getClass().getDeclaredField("pid");
                f.setAccessible(true);
                result = f.getLong(p);
                f.setAccessible(false);
            }
        }
        catch(Exception ex)
        {
            pid = -1;
        }
        return pid;
    }

我是新手。我出错了吗?或者我做错了什么? 任何帮助或建议将非常感谢..谢谢。

1 个答案:

答案 0 :(得分:0)

你看过this class了吗?它根本不是优雅,但似乎是你想要做的一个例子。