0

CPU 使用率と最も CPU を消費しているプロセスをログに記録するプログラムを作成しようとしています。firefox.exe が最大の CPU、つまり 70% を使用していると仮定すると、このプロセスのみを CPU 使用率とともにログに記録する必要があります。

このタスクを達成するために sigar ライブラリを使用しています。これは、システムの CPU 使用率を毎秒取得する現在のコードです。

public class CPULogger {

    private static Sigar sigar = new Sigar();
    public void startLogging() 
    {
        Mem mem = null;
        CpuTimer cpuTimer = null;
        CpuPerc cpuPerc = null;
        FileSystemUsage fileSystemUsage = null;
        int num = 0;
        try
        {
            System.load(System.getProperty("user.dir") + "\\sigar-x86-winnt.dll");
        }
        catch(Exception exc)
        {
            writeLogs(exc.getMessage());
        }

        while(true)
        {
            try
            {
                Thread.sleep(1000);

                cpuPerc = sigar.getCpuPerc();
                num = (int)Math.ceil(cpuPerc.getCombined()*100);

                writeLogs(Double.toString(num).split("\\.")[0] + " %" + (num >= 90 ? "\tAlert" : ""));
             }
            catch(Exception e)
            {
                writeLogs(e.getMessage());
            }
        }
    }
    public void writeLogs(String logDesc)
    {
        try
        {
            PrintWriter writer;
            writer = new PrintWriter(new BufferedWriter(new FileWriter("Logs.txt", true)));
            writer.println(new java.util.Date() + "\t" + logDesc);
            writer.close();
        }
        catch(IOException e)
        {}
        catch(Exception e)
        {

        }
    }

    public static void main(String[] args) {

        CPULogger ul = new CPULogger();
        ul.startLogging();
    }

}

最高の CPU でプロセスをログに記録するにはどうすればよいですか?

4

1 に答える 1

1

IMO 次のコードを使用して、すべてのプロセスのリストを取得できます。

    final Sigar sigar = new Sigar();        
    final long[] processes;
    try {
        processes = sigar.getProcList();
    } catch (Exception e) {
        //throw exception.
    }

次に、すべてのプロセスを反復処理して、各プロセスの CPU 使用率を取得できます。

for (final long processId : processes)  {
        try {
            ProcCpu procCpu = sigar.getProcCpu(processId);
            // compare and set max value.
        } catch (SigarException e) {
            //In case for some pid access is denied.
        }

}

max次に、この値をログに記録できます。サンプルプログラムについては、このリンクを確認することもできます。

于 2015-10-20T04:06:36.260 に答える