01: package org.cougaar.core.qos.profile;
02:
03: import java.lang.reflect.*;
04: import java.io.*;
05: import java.text.*;
06: import java.util.*;
07: import java.util.regex.*;
08: import org.cougaar.core.agent.*;
09: import org.cougaar.core.component.*;
10: import org.cougaar.core.mts.*;
11: import org.cougaar.core.node.*;
12: import org.cougaar.core.qos.metrics.*;
13: import org.cougaar.core.service.*;
14: import org.cougaar.core.service.wp.*;
15: import org.cougaar.core.thread.*;
16: import org.cougaar.core.wp.resolver.*;
17: import org.cougaar.util.*;
18:
19: /**
20: * This component profiles the JVM's process size from
21: * "/proc/self/status" (VmSize & VmRSS).
22: * <p>
23: * Example output:<pre>
24: * pid_status - #VmSize_kB, VmRSS_kB,
25: * pid_status - 267184, 43204
26: * </pre>
27: *
28: * @see ProfilerCoordinator required coordinator component
29: */
30: public class ProcStatus extends ProfilerBase {
31: private static final String[] FIELDS = new String[] { "VmSize_kB",
32: "VmRSS_kB", };
33: private static final String HEADER = toHeader(FIELDS);
34:
35: public void run() {
36: log("org.cougaar.core.qos.profile.proc.pid_status", HEADER,
37: getProc());
38: }
39:
40: private String getProc() {
41: StringBuffer buf = new StringBuffer();
42: try {
43: BufferedReader in = new BufferedReader(new FileReader(
44: "/proc/self/status"));
45: String vmSize = "-1";
46: String vmRSS = vmSize;
47: while (true) {
48: String line = in.readLine();
49: if (line == null) {
50: break;
51: }
52: String sp = "^\\s*" + "(VmSize|VmRSS):" + "\\s*"
53: + "(\\S+)" + "\\s*" + "kB" + "\\s*$";
54: Pattern p = Pattern.compile(sp);
55: Matcher m = p.matcher(line);
56: if (!m.matches()) {
57: continue;
58: }
59: String name = m.group(1);
60: String value = m.group(2);
61: if ("VmSize".equals(name)) {
62: vmSize = value;
63: } else if ("VmRSS".equals(name)) {
64: vmRSS = value;
65: }
66: }
67: in.close();
68: buf.append(vmSize + ", " + vmRSS);
69: } catch (Exception e) {
70: }
71: return buf.toString();
72: }
73: }
|