add thread cpu usage percent
This commit is contained in:
		
							parent
							
								
									fb98889e17
								
							
						
					
					
						commit
						60c864fd55
					
				@ -28,7 +28,8 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
    private long cpuTotal;
 | 
			
		||||
    private long cpuUser;
 | 
			
		||||
    private long cpuSys;
 | 
			
		||||
    
 | 
			
		||||
    private double cpuPercent;
 | 
			
		||||
 | 
			
		||||
    private ThreadCpu cpu = new ThreadCpu();
 | 
			
		||||
 | 
			
		||||
    private long startTime;
 | 
			
		||||
@ -47,6 +48,7 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        this.cpuTotal = 0;
 | 
			
		||||
        this.cpuUser  = 0;
 | 
			
		||||
        this.cpuSys   = 0;
 | 
			
		||||
        this.cpuPercent = 0.0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void add(CpuTimer timer) {
 | 
			
		||||
@ -81,11 +83,13 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        this.cpuUser  += diff.user;
 | 
			
		||||
        this.cpuSys   += diff.sys;
 | 
			
		||||
 | 
			
		||||
        long stopTime = System.currentTimeMillis();
 | 
			
		||||
        long timeNow = System.currentTimeMillis();
 | 
			
		||||
        
 | 
			
		||||
        long time = stopTime - this.startTime;
 | 
			
		||||
        double timeDiff = timeNow - this.startTime;
 | 
			
		||||
 | 
			
		||||
        this.totalTime += time;
 | 
			
		||||
        this.totalTime += timeDiff;
 | 
			
		||||
 | 
			
		||||
        this.cpuPercent = toMillis(diff.total) / timeDiff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ThreadCpu getDiff() {
 | 
			
		||||
@ -116,16 +120,24 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        return this.totalTime;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private long toMillis(long ns) {
 | 
			
		||||
        return ns / 1000000; //convert nanos to millis
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getCpuTotal() {
 | 
			
		||||
        return this.cpuTotal / 1000000; //convert nanos to millis
 | 
			
		||||
        return toMillis(this.cpuTotal);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public long getCpuUser() {
 | 
			
		||||
        return this.cpuUser / 1000000; //convert nanos to millis
 | 
			
		||||
        return toMillis(this.cpuUser);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public long getCpuSys() {
 | 
			
		||||
        return this.cpuSys / 1000000; //convert nanos to millis
 | 
			
		||||
        return toMillis(this.cpuSys / 1000000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public double getCpuUsage() {
 | 
			
		||||
        return this.cpuPercent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String format(long elap) {
 | 
			
		||||
@ -148,5 +160,6 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
                    format(getTotalTime()));
 | 
			
		||||
        out.println("user....." + format(getCpuUser()));
 | 
			
		||||
        out.println("sys......" + format(getCpuSys()));
 | 
			
		||||
        out.println("usage...." + CpuPerc.format(getCpuUsage()));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -26,5 +26,7 @@ public interface CpuTimerMBean {
 | 
			
		||||
 | 
			
		||||
    public long getCpuSys();
 | 
			
		||||
 | 
			
		||||
    public double getCpuUsage();
 | 
			
		||||
 | 
			
		||||
    public long getTotalTime();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,7 @@
 | 
			
		||||
 | 
			
		||||
package org.hyperic.sigar.test;
 | 
			
		||||
 | 
			
		||||
import org.hyperic.sigar.CpuPerc;
 | 
			
		||||
import org.hyperic.sigar.CpuTimer;
 | 
			
		||||
import org.hyperic.sigar.Sigar;
 | 
			
		||||
import org.hyperic.sigar.SigarNotImplementedException;
 | 
			
		||||
@ -46,19 +47,29 @@ public class TestThreadCpu extends SigarTestCase {
 | 
			
		||||
        assertGtEqZeroTrace("Total", cpu.getTotal());
 | 
			
		||||
 | 
			
		||||
        CpuTimer timer = new CpuTimer(sigar);
 | 
			
		||||
        timer.start();
 | 
			
		||||
 | 
			
		||||
        for (int i=0; i<1000000; i++) {
 | 
			
		||||
            System.getProperty("java.home");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        traceln("\nDiff...\n");
 | 
			
		||||
        String sleepTime =
 | 
			
		||||
            System.getProperty("sigar.testThreadCpu.sleep");
 | 
			
		||||
        if (sleepTime != null) {
 | 
			
		||||
            Thread.sleep(Integer.parseInt(sleepTime) * 1000);
 | 
			
		||||
        }
 | 
			
		||||
        timer.stop();
 | 
			
		||||
 | 
			
		||||
        ThreadCpu diff = timer.getDiff();
 | 
			
		||||
        traceln("\nUsage...\n");
 | 
			
		||||
 | 
			
		||||
        assertGtEqZeroTrace("User", diff.getUser());
 | 
			
		||||
        assertGtEqZeroTrace("User", timer.getCpuUser());
 | 
			
		||||
 | 
			
		||||
        assertGtEqZeroTrace("Sys", diff.getSys());
 | 
			
		||||
        assertGtEqZeroTrace("Sys", timer.getCpuSys());
 | 
			
		||||
 | 
			
		||||
        assertGtEqZeroTrace("Total", diff.getTotal());
 | 
			
		||||
        assertGtEqZeroTrace("Total", timer.getCpuTotal());
 | 
			
		||||
 | 
			
		||||
        assertGtEqZeroTrace("Real Time", timer.getTotalTime());
 | 
			
		||||
 | 
			
		||||
        traceln("Cpu Percent=" + CpuPerc.format(timer.getCpuUsage()));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user