improve CpuUsage metric
This commit is contained in:
		
							parent
							
								
									85a5f105e4
								
							
						
					
					
						commit
						9f5d5cadf5
					
				@ -34,7 +34,9 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
    private long cpuTotal;
 | 
			
		||||
    private long cpuUser;
 | 
			
		||||
    private long cpuSys;
 | 
			
		||||
    private double cpuPercent;
 | 
			
		||||
    private long cpuSampleFirst;
 | 
			
		||||
    private long cpuSampleLast;
 | 
			
		||||
    private long cpuSampleTime;
 | 
			
		||||
 | 
			
		||||
    private ThreadCpu cpu = new ThreadCpu();
 | 
			
		||||
 | 
			
		||||
@ -56,10 +58,23 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        this.cpuTotal = 0;
 | 
			
		||||
        this.cpuUser  = 0;
 | 
			
		||||
        this.cpuSys   = 0;
 | 
			
		||||
        this.cpuPercent = 0.0;
 | 
			
		||||
        this.cpuSampleFirst = 0;
 | 
			
		||||
        this.cpuSampleLast = 0;
 | 
			
		||||
        this.cpuSampleTime = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void stamp(CpuTimer timer) {
 | 
			
		||||
        if (this.cpuSampleFirst == 0) {
 | 
			
		||||
            this.cpuSampleFirst = toMillis(timer.cpu.total);
 | 
			
		||||
            this.cpuSampleTime = timer.startTime;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            this.cpuSampleLast = toMillis(timer.cpu.total);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void add(CpuTimer timer) {
 | 
			
		||||
        stamp(timer);
 | 
			
		||||
        this.cpuTotal  += timer.cpuTotal;
 | 
			
		||||
        this.cpuUser   += timer.cpuUser;
 | 
			
		||||
        this.cpuSys    += timer.cpuSys;
 | 
			
		||||
@ -78,6 +93,7 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        } catch (SigarException e) {
 | 
			
		||||
            throw new IllegalArgumentException(e.toString());
 | 
			
		||||
        }
 | 
			
		||||
        stamp(this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void stop() {
 | 
			
		||||
@ -96,8 +112,6 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        double timeDiff = this.stopTime - this.startTime;
 | 
			
		||||
 | 
			
		||||
        this.totalTime += timeDiff;
 | 
			
		||||
 | 
			
		||||
        this.cpuPercent = toMillis(diff.total) / timeDiff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ThreadCpu getDiff() {
 | 
			
		||||
@ -121,6 +135,8 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
        diff.user  = this.cpu.user - startUser;
 | 
			
		||||
        diff.sys   = this.cpu.sys - startSys;
 | 
			
		||||
 | 
			
		||||
        stamp(this);
 | 
			
		||||
 | 
			
		||||
        return diff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -141,11 +157,32 @@ public class CpuTimer implements CpuTimerMBean {
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public long getCpuSys() {
 | 
			
		||||
        return toMillis(this.cpuSys / 1000000);
 | 
			
		||||
        return toMillis(this.cpuSys);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //expecting start/stop/add to be called more often than this,
 | 
			
		||||
    //so we give percentage over time in between calls.
 | 
			
		||||
    public double getCpuUsage() {
 | 
			
		||||
        return this.cpuPercent;
 | 
			
		||||
        if ((this.cpuSampleFirst == 0) ||
 | 
			
		||||
            (this.cpuSampleLast == 0))
 | 
			
		||||
        {
 | 
			
		||||
            return 0.0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        long timeNow = System.currentTimeMillis();
 | 
			
		||||
        double diff = timeNow - this.cpuSampleTime;
 | 
			
		||||
        if (diff == 0) {
 | 
			
		||||
            return 0.0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        double usage =
 | 
			
		||||
            (this.cpuSampleLast - this.cpuSampleFirst) / diff;
 | 
			
		||||
 | 
			
		||||
        this.cpuSampleFirst = 0;
 | 
			
		||||
        this.cpuSampleLast = 0;
 | 
			
		||||
        this.cpuSampleTime = 0;
 | 
			
		||||
 | 
			
		||||
        return usage;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getLastSampleTime() {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user