我正在尝试通过Java程序查找一些系统统计信息(CPU利用率,磁盘利用率和内存利用率)。为此,我一直在使用SIGAR。尽管(我认为)我正确地理解了后两者,但是我没有正确地理解CPU利用率%。在下面附加我的代码,有人可以帮助我了解这里出了什么问题吗?

import java.io.*;
import java.util.*;
import java.text.*;
import java.lang.*;

import org.hyperic.sigar.CpuTimer;
import org.hyperic.sigar.DiskUsage;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;




public class SystemMonitor {

    private static Sigar sigar = new Sigar();

    public static void getSystemStatistics(){
        Mem mem = null;
        CpuTimer cputimer = null;
        FileSystemUsage filesystemusage = null;
        try {
            mem = sigar.getMem();
            cputimer = new CpuTimer(sigar);
            filesystemusage = sigar.getFileSystemUsage("C:");
        } catch (SigarException se) {
            se.printStackTrace();
        }


        System.out.print(mem.getUsedPercent()+"\t");
        System.out.print(cputimer.getCpuUsage()+"\t");
        System.out.print(filesystemusage.getUsePercent()+"\n");

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SystemMonitor m1 = new SystemMonitor();
        for(int i=0; i<1000;i++){
        m1.getSystemStatistics();
        }
    }




}


我一直得到0的CPUUtilization%,我认为这是不正确的。

最佳答案

我对CpuTimer的解释不正确。我可以改用CpuPerc来查找CPU利用率。附加代码段:

public static void getSystemStatistics(){
    Mem mem = null;
    CpuPerc cpuperc = null;
    FileSystemUsage filesystemusage = null;
    try {
        mem = sigar.getMem();
        cpuperc = sigar.getCpuPerc();
        filesystemusage = sigar.getFileSystemUsage("C:");
    } catch (SigarException se) {
        se.printStackTrace();
    }


    System.out.print(mem.getUsedPercent()+"\t");
    System.out.print((cpuperc.getCombined()*100)+"\t");
    System.out.print(filesystemusage.getUsePercent()+"\n");
}

关于java - 如何使用Sigar查找Java中的CPU总利用率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28039533/

10-13 09:10