You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2013/08/22 18:07:47 UTC
svn commit: r1516497 -
/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
Author: cwiklik
Date: Thu Aug 22 16:07:47 2013
New Revision: 1516497
URL: http://svn.apache.org/r1516497
Log:
UIMA-3208 Fixed how process CPU usage is calculated
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java?rev=1516497&r1=1516496&r2=1516497&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java Thu Aug 22 16:07:47 2013
@@ -50,7 +50,7 @@ public class LinuxProcessMetricsProcesso
// private RandomAccessFile nodeStatFile;
private RandomAccessFile processStatFile;
- private long initTimeinSeconds = 0;
+ private long totalCpuInitUsage = 0;
private boolean initializing = true;
@@ -72,6 +72,10 @@ public class LinuxProcessMetricsProcesso
private volatile boolean closed = true;
+ private long clockAtStartOfRun=0;
+
+ private long percentCPU=0;
+
// private int logCounter=0;
public LinuxProcessMetricsProcessor(DuccLogger logger, IDuccProcess process, NodeAgent agent,
String statmFilePath, String nodeStatFilePath, String processStatFilePath,
@@ -159,7 +163,7 @@ public class LinuxProcessMetricsProcesso
pid, processStatFile, 42, 0);
processCpuUsage = pool.submit(processCpuUsageCollector);
- totalCpuUsage += processCpuUsage.get().getTotalJiffies();
+ totalCpuUsage += (processCpuUsage.get().getTotalJiffies()/ agent.cpuClockRate);
RandomAccessFile rStatmFile =
new RandomAccessFile("/proc/" + pid + "/statm", "r");
@@ -188,7 +192,7 @@ public class LinuxProcessMetricsProcesso
process.getPID(), processStatFile, 42, 0);
processCpuUsage = pool.submit(processCpuUsageCollector);
- totalCpuUsage = processCpuUsage.get().getTotalJiffies();
+ totalCpuUsage = processCpuUsage.get().getTotalJiffies()/ agent.cpuClockRate;
ProcessResidentMemoryCollector collector = new ProcessResidentMemoryCollector(statmFile, 2,
0);
@@ -205,18 +209,24 @@ public class LinuxProcessMetricsProcesso
// report cpu utilization while the process is running
if ( managedProcess.getDuccProcess().getProcessState().equals(ProcessState.Running)) {
if (agent.cpuClockRate > 0) {
+ // if the process just change state from Initializing to Running ...
if ( initializing ) {
initializing = false;
// cache how much cpu was used up during initialization of the process
- initTimeinSeconds = totalCpuUsage / agent.cpuClockRate;
+ totalCpuInitUsage = totalCpuUsage;
+ // capture time when process state changed to Running
+ clockAtStartOfRun = System.currentTimeMillis();
}
- // normalize cpu usage to report in seconds. Also subtract how much cpu was
+ // normalize time in running state into seconds
+ long timeSinceRunningInSeconds = (System.currentTimeMillis() - clockAtStartOfRun)/1000;
+ // normalize cpu % usage to report in seconds. Also subtract how much cpu was
// used during initialization
- long cpu = ( totalCpuUsage/agent.cpuClockRate)-initTimeinSeconds;
+ percentCPU = 100* ( totalCpuUsage - totalCpuInitUsage )/timeSinceRunningInSeconds;
+
logger.info("process", null, "----------- PID:" + process.getPID()
- + " CPU Time (seconds):" + cpu);
+ + " CPU Time:" + percentCPU+"%");
// Publish cumulative CPU usage
- process.setCpuTime(cpu);
+ process.setCpuTime(percentCPU);
} else {
process.setCpuTime(0);
logger.info("process", null,
@@ -224,9 +234,13 @@ public class LinuxProcessMetricsProcesso
+ process.getPID());
}
- } else {
- // report 0 for CPU while the process is initializing
- process.setCpuTime(0);
+ } else if ( managedProcess.getDuccProcess().getProcessState().equals(ProcessState.Initializing)) {
+ // report 0 for CPU while the process is initializing
+ process.setCpuTime(0);
+ }
+ else {
+ // if process is not dead, report the last known percentCPU
+ process.setCpuTime(percentCPU);
}
// long majorFaults = processMajorFaultUsage.get().getMajorFaults();
// collects process Major faults (swap in memory)