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 2016/09/16 20:49:07 UTC
svn commit: r1761082 - in
/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent:
metrics/collectors/ProcessCpuUsageCollector.java
processors/LinuxProcessMetricsProcessor.java
Author: cwiklik
Date: Fri Sep 16 20:49:07 2016
New Revision: 1761082
URL: http://svn.apache.org/viewvc?rev=1761082&view=rev
Log:
UIMA-5047 updated CPU monitoring and reporting
Modified:
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java?rev=1761082&r1=1761081&r2=1761082&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java Fri Sep 16 20:49:07 2016
@@ -45,7 +45,7 @@ public class ProcessCpuUsageCollector im
private long collect() throws Exception{
- return Long.parseLong(cgm.getCpuUsage(containerId));
+ return cgm.getCpuUsage(containerId);
}
/*
Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java?rev=1761082&r1=1761081&r2=1761082&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java Fri Sep 16 20:49:07 2016
@@ -55,6 +55,10 @@ public class LinuxProcessMetricsProcesso
private RandomAccessFile processStatFile;
private long totalCpuInitUsage = 0;
+
+ private long previousCPUReadingInMillis = 0;
+
+ private long previousSnapshotTime = 0;
private boolean initializing = true;
@@ -170,7 +174,7 @@ public class LinuxProcessMetricsProcesso
// a process
long totalSwapUsage = 0;
long totalFaults = 0;
- long totalCpuUsage = 0;
+ long totalCpuUsageInMillis = 0;
long totalRss = 0;
int currentCpuUsage = 0;
Future<ProcessMemoryPageLoadUsage> processMajorFaultUsage = null;
@@ -216,8 +220,6 @@ public class LinuxProcessMetricsProcesso
ProcessCpuUsageCollector processCpuUsageCollector = new ProcessCpuUsageCollector(
logger, pid, raf, 42, 0);
*/
- ProcessCpuUsageCollector processCpuUsageCollector =
- new ProcessCpuUsageCollector(logger, agent.cgroupsManager, containerId);
// if process is stopping or already dead dont
// collect metrics. The Camel
// route has just been stopped.
@@ -225,15 +227,6 @@ public class LinuxProcessMetricsProcesso
return;
}
- processCpuUsage = pool
- .submit(processCpuUsageCollector);
- long cpuUsage = processCpuUsage.get().getCpuUsage();
-
- totalCpuUsage += ( processCpuUsage.get().getCpuUsage() / agent.cpuClockRate );
- logger.info(
- "LinuxProcessMetricsProcessor.process",null,
- "CPU USAGE:"+cpuUsage+ " CLOCK RATE:"+agent.cpuClockRate+" Total CPU USAGE:"+totalCpuUsage);
-
} catch( Exception ee) {
logger.warn(
@@ -241,7 +234,7 @@ public class LinuxProcessMetricsProcesso
null,ee);
}
- currentCpuUsage += collectProcessCurrentCPU(pid);
+ //currentCpuUsage += collectProcessCurrentCPU(pid);
RandomAccessFile rStatmFile = null;
try {
@@ -273,11 +266,26 @@ public class LinuxProcessMetricsProcesso
rStatmFile.close();
}
+
+ ProcessCpuUsageCollector processCpuUsageCollector =
+ new ProcessCpuUsageCollector(logger, agent.cgroupsManager, containerId);
+ processCpuUsage = pool
+ .submit(processCpuUsageCollector);
+ long cpuUsageInNanos = processCpuUsage.get().getCpuUsage();
+
+// totalCpuUsage += ( processCpuUsage.get().getCpuUsage() / agent.cpuClockRate );
+// totalCpuUsage += ( cpuUsage / agent.cpuClockRate );
+ // cpuUsage comes from cpuacct.usage and is in nanos
+ totalCpuUsageInMillis = Math.round( cpuUsageInNanos / 1000000 ); // normalize into millis
+
+ logger.info(
+ "LinuxProcessMetricsProcessor.process",null,
+ "CPU USAGE:"+cpuUsageInNanos+ " CLOCK RATE:"+agent.cpuClockRate+" Total CPU USAGE:"+totalCpuUsageInMillis);
} else {
if (swapUsageScript != null) {
DuccProcessSwapSpaceUsage processSwapSpaceUsage = new DuccProcessSwapSpaceUsage(
process.getPID(),
- managedProcess.getOwner(), swapUsageScript,
+ managedProcess.getOwner(), swapUsageScript,
logger);
totalSwapUsage = processSwapSpaceUsage
.getSwapUsage();
@@ -315,10 +323,9 @@ public class LinuxProcessMetricsProcesso
*/
// Cgroups are not available so percent CPU is not available
- totalCpuUsage = 0;
-
- currentCpuUsage = collectProcessCurrentCPU(process
- .getPID());
+ totalCpuUsageInMillis = -1; // -1 stands for N/A
+ currentCpuUsage = -1; // -1 stands for N/A
+// currentCpuUsage = collectProcessCurrentCPU(process.getPID());
ProcessResidentMemoryCollector collector = new ProcessResidentMemoryCollector(
statmFile, 2, 0);
@@ -344,63 +351,53 @@ 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
- totalCpuInitUsage = totalCpuUsage;
- // capture time when process state changed to
- // Running
- clockAtStartOfRun = System.currentTimeMillis();
- }
+ .equals(ProcessState.Running) ||
+ managedProcess.getDuccProcess().getProcessState()
+ .equals(ProcessState.Initializing)
+ ) {
+ if (agent.useCgroups ) {
// normalize time in running state into seconds
- long timeSinceRunningInSeconds = (System
- .currentTimeMillis() - clockAtStartOfRun) / 1000;
- if (timeSinceRunningInSeconds > 0) { // prevent division
- // by zero
- // normalize cpu % usage to report in seconds. Also
- // subtract how much cpu was
- // used during initialization
- percentCPU = 100
- * (totalCpuUsage - totalCpuInitUsage)
- / timeSinceRunningInSeconds;
- }
-
- // Publish cumulative CPU usage
- process.setCpuTime(percentCPU);
+ percentCPU = Math.round(100*( (totalCpuUsageInMillis*1.0)/ (process.getTimeWindowRun().getElapsedMillis()*1.0)));
+ process.setCpuTime( percentCPU );
} else {
- process.setCpuTime(0);
+ process.setCpuTime(-1); // -1 stands for N/A
logger.info(
"process",
null,
"Agent is unable to determine Node's clock rate. Defaulting CPU Time to 0 For Process with PID:"
+ process.getPID());
}
-
- } else if (managedProcess.getDuccProcess().getProcessState()
- .equals(ProcessState.Initializing)) {
- // report 0 for CPU while the process is initializing
- process.setCpuTime(0);
} else {
- process.setCpuTime(0);
// if process is not dead, report the last known percentCPU
- // process.setCpuTime(percentCPU);
+ process.setCpuTime(percentCPU);
+ }
+ // publish current CPU usage by computing a delta from the last time
+ // CPU data was fetched.
+ if ( totalCpuUsageInMillis > 0 ) {
+ double millisCPU = ( totalCpuUsageInMillis - previousCPUReadingInMillis )*1.0;
+ double millisRun = ( System.currentTimeMillis() - previousSnapshotTime )*1.0;
+ process.setCurrentCPU(Math.round(100*(millisCPU/millisRun) ) );
+ previousCPUReadingInMillis = totalCpuUsageInMillis;
+ previousSnapshotTime = System.currentTimeMillis();
+
+ } else {
+ if (agent.useCgroups ) {
+ process.setCurrentCPU(0);
+ } else {
+ process.setCurrentCPU(-1); // -1 stands for N/A
+ }
}
- process.setCurrentCPU(currentCpuUsage);
logger.info(
"process",
null,
"----------- PID:" + process.getPID()
- + " Average CPU Time:" + percentCPU
- + "% Current CPU Time:"
- + process.getCurrentCPU());
+ + " Total CPU Time (%):" + process.getCpuTime()
+ + " Delta CPU Time (%):" +process.getCurrentCPU() );
+// + "% Current CPU Time:"
+// + process.getCurrentCPU());
// long majorFaults =
- // processMajorFaultUsage.get().getMajorFaults();
+ // processMajorFaultUsage.get().getMajorFaults();
// collects process Major faults (swap in memory)
process.setMajorFaults(totalFaults);
// Current Process Swap Usage in bytes