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/08/18 13:45:24 UTC
svn commit: r1756785 - in /uima/uima-ducc/trunk:
uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/
uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/
uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/pr...
Author: cwiklik
Date: Thu Aug 18 13:45:24 2016
New Revision: 1756785
URL: http://svn.apache.org/viewvc?rev=1756785&view=rev
Log:
UIMA-5047 Modified to fetch cpu usage from cgroups cpuacct.stat
Modified:
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
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
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java
Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java Thu Aug 18 13:45:24 2016
@@ -57,6 +57,7 @@ public class CGroupsManager {
private static final String CGDuccMemoryPath = "/memory/"+SYSTEM+"/";
private static final String CGDuccCpuPath = "/cpu/"+SYSTEM+"/";
private static final String CGProcsFile = "/cgroup.procs";
+ private static final String CGDuccCpuAcctPath = "/cpu/"+SYSTEM+"/";
// legacy means that the cgonfig points to <cgroup location>/ducc
private boolean legacyCgConfig = false;
@@ -489,6 +490,33 @@ public class CGroupsManager {
return false;
}
+ public String getCpuUsage(String containerId ) throws Exception {
+ String usage = "0";
+ String file = getCGroupLocation("cpuacct")+containerId+System.getProperty("file.separator")+"cpuacct.stat";
+ agentLogger.trace("getCpuUsage", null, "CPUACCT.STAT file:"+file);
+ File f = new File(file);
+ if ( f.exists() ) {
+ InputStreamReader isr = new InputStreamReader(new FileInputStream(f));
+ BufferedReader br = new BufferedReader(isr);
+ String line;
+ try {
+ while ((line = br.readLine()) != null) {
+ agentLogger.trace("getCpuUsage", null, "CPUACCT.STAT Line:"+line);
+ // The line read from cpuacct.stat has: NAME VALUE syntax.
+ // Need just the VALUE part
+ usage = (line.trim().split(" "))[1]; // get the CPU in user mode
+ break;
+ }
+ } finally {
+ if (isr != null) {
+ isr.close();
+ }
+ agentLogger.trace("getCpuUsage", null, "Done Reading cpuacct.stat file:"+file);
+
+ }
+ }
+ return usage;
+ }
/**
* Sets the max memory use for an existing cgroup container.
*
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=1756785&r1=1756784&r2=1756785&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 Thu Aug 18 13:45:24 2016
@@ -18,35 +18,36 @@
*/
package org.apache.uima.ducc.agent.metrics.collectors;
-import java.io.RandomAccessFile;
import java.util.concurrent.Callable;
+import org.apache.uima.ducc.agent.launcher.CGroupsManager;
import org.apache.uima.ducc.common.agent.metrics.cpu.DuccProcessCpuUsage;
import org.apache.uima.ducc.common.agent.metrics.cpu.ProcessCpuUsage;
import org.apache.uima.ducc.common.utils.DuccLogger;
-public class ProcessCpuUsageCollector extends AbstractMetricCollector implements
+public class ProcessCpuUsageCollector implements
Callable<ProcessCpuUsage> {
- //private DuccLogger logger;
- //private String pid;
-
- public ProcessCpuUsageCollector(DuccLogger logger, String pid,
- RandomAccessFile fileHandle, int howMany, int offset) {
- super(fileHandle, howMany, offset);
- //this.logger = logger;
- //this.pid = pid;
+ private String containerId=null;
+ private CGroupsManager cgm=null;
+
+ public ProcessCpuUsageCollector(DuccLogger logger, CGroupsManager mgr, String jobId ) {
+ this.containerId = jobId;
+ this.cgm = mgr;
}
public ProcessCpuUsage call() throws Exception {
try {
- super.parseMetricFile();
- return new DuccProcessCpuUsage(super.metricFileContents,
- super.metricFieldOffsets, super.metricFieldLengths);
+ return new DuccProcessCpuUsage(collect());
} catch (Exception e) {
- e.printStackTrace();
throw e;
}
}
+
+ private long collect() throws Exception{
+
+ return Long.parseLong(cgm.getCpuUsage(containerId));
+
+ }
/*
private String execTopShell() throws Exception {
List<String> command = new ArrayList<String>();
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=1756785&r1=1756784&r2=1756785&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 Thu Aug 18 13:45:24 2016
@@ -29,6 +29,7 @@ import java.util.concurrent.Future;
import org.apache.camel.Exchange;
import org.apache.uima.ducc.agent.NodeAgent;
+import org.apache.uima.ducc.agent.launcher.CGroupsManager;
import org.apache.uima.ducc.agent.launcher.ManagedProcess;
import org.apache.uima.ducc.agent.metrics.collectors.DuccGarbageStatsCollector;
import org.apache.uima.ducc.agent.metrics.collectors.ProcessCpuUsageCollector;
@@ -208,12 +209,15 @@ public class LinuxProcessMetricsProcesso
.submit(processMajorFaultUsageCollector);
totalFaults += processMajorFaultUsage.get()
.getMajorFaults();
- RandomAccessFile raf = null;
+ //RandomAccessFile raf = null;
try {
+ /*
raf = new RandomAccessFile("/proc/" + pid + "/stat", "r");
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.
@@ -223,19 +227,19 @@ public class LinuxProcessMetricsProcesso
processCpuUsage = pool
.submit(processCpuUsageCollector);
- totalCpuUsage += (processCpuUsage.get()
- .getTotalJiffies() / agent.cpuClockRate);
+ 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(
"LinuxProcessMetricsProcessor.process",
null,ee);
-
- } finally {
- if ( raf != null ) {
- raf.close();
- }
- }
+ }
currentCpuUsage += collectProcessCurrentCPU(pid);
@@ -293,10 +297,11 @@ public class LinuxProcessMetricsProcesso
totalFaults = processMajorFaultUsage.get()
.getMajorFaults();
+ /*
ProcessCpuUsageCollector processCpuUsageCollector = new ProcessCpuUsageCollector(
logger, process.getPID(), processStatFile, 42,
0);
-
+
// if process is stopping or already dead dont collect
// metrics. The Camel
// route has just been stopped.
@@ -306,6 +311,12 @@ public class LinuxProcessMetricsProcesso
processCpuUsage = pool.submit(processCpuUsageCollector);
totalCpuUsage = processCpuUsage.get().getTotalJiffies()
/ agent.cpuClockRate;
+
+*/
+
+ // Cgroups are not available so percent CPU is not available
+ totalCpuUsage = 0;
+
currentCpuUsage = collectProcessCurrentCPU(process
.getPID());
Modified: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java Thu Aug 18 13:45:24 2016
@@ -18,25 +18,14 @@
*/
package org.apache.uima.ducc.common.agent.metrics.cpu;
-import org.apache.uima.ducc.common.node.metrics.ByteBufferParser;
-
-public class DuccProcessCpuUsage extends ByteBufferParser
-implements ProcessCpuUsage {
+public class DuccProcessCpuUsage implements ProcessCpuUsage {
private static final long serialVersionUID = 1L;
- public static final int USERJIFFIES=13;
- public static final int SYSTEMJIFFIES=14;
+ private long cpuUsage=0;
- public DuccProcessCpuUsage(byte[] memInfoBuffer,
- int[] memInfoFieldOffsets, int[] memInfoFiledLengths) {
- super(memInfoBuffer, memInfoFieldOffsets, memInfoFiledLengths);
+ public DuccProcessCpuUsage( long cpuUsage ) {
+ this.cpuUsage = cpuUsage;
}
- public long getUserJiffies() {
- return super.getFieldAsLong(USERJIFFIES);
- }
- public long getKernelJiffies() {
- return super.getFieldAsLong(SYSTEMJIFFIES);
- }
- public long getTotalJiffies() {
- return (getUserJiffies()+getKernelJiffies());
+ public long getCpuUsage() {
+ return cpuUsage;
}
}
Modified: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java Thu Aug 18 13:45:24 2016
@@ -21,7 +21,5 @@ package org.apache.uima.ducc.common.agen
import java.io.Serializable;
public interface ProcessCpuUsage extends Serializable {
- public long getUserJiffies();
- public long getKernelJiffies();
- public long getTotalJiffies();
+ public long getCpuUsage();
}