Stabil version av liljm.jar påbörjar JmxMonREST getData
Showing
8 changed files
with
153 additions
and
88 deletions
... | @@ -12,5 +12,6 @@ | ... | @@ -12,5 +12,6 @@ |
12 | <classpathentry kind="lib" path="lib/javax.servlet.jar"/> | 12 | <classpathentry kind="lib" path="lib/javax.servlet.jar"/> |
13 | <classpathentry kind="lib" path="lib/javax.servlet.jsp.jar"/> | 13 | <classpathentry kind="lib" path="lib/javax.servlet.jsp.jar"/> |
14 | <classpathentry kind="lib" path="lib/javax.servlet.jsp.jstl.jar"/> | 14 | <classpathentry kind="lib" path="lib/javax.servlet.jsp.jstl.jar"/> |
15 | <classpathentry combineaccessrules="false" kind="src" path="/LILJM Library"/> | ||
15 | <classpathentry kind="output" path="build/classes"/> | 16 | <classpathentry kind="output" path="build/classes"/> |
16 | </classpath> | 17 | </classpath> | ... | ... |
JavaMonWeb/WebContent/WEB-INF/lib/liljm.jar
0 → 100644
No preview for this file type
No preview for this file type
JavaMonWeb/src/JmxMonRESTgetData.java
0 → 100644
1 | |||
2 | |||
3 | import java.io.IOException; | ||
4 | |||
5 | import javax.management.remote.JMXServiceURL; | ||
6 | import javax.servlet.ServletException; | ||
7 | import javax.servlet.annotation.WebServlet; | ||
8 | import javax.servlet.http.HttpServlet; | ||
9 | import javax.servlet.http.HttpServletRequest; | ||
10 | import javax.servlet.http.HttpServletResponse; | ||
11 | |||
12 | import se.lil.jm.JmxMon; | ||
13 | import se.lil.jm.Registry; | ||
14 | |||
15 | /** | ||
16 | * Servlet implementation class JmxMonRESTgetData | ||
17 | */ | ||
18 | @WebServlet(description = "Calls getData on an existing JmxMon object or creates and calls it", urlPatterns = { "/JmxMonREST/getData" }) | ||
19 | public class JmxMonRESTgetData extends HttpServlet { | ||
20 | private static final long serialVersionUID = 1L; | ||
21 | |||
22 | /** | ||
23 | * @see HttpServlet#HttpServlet() | ||
24 | */ | ||
25 | public JmxMonRESTgetData() { | ||
26 | super(); | ||
27 | // TODO Auto-generated constructor stub | ||
28 | } | ||
29 | |||
30 | /** | ||
31 | * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) | ||
32 | */ | ||
33 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { | ||
34 | response.setContentType("application/json"); | ||
35 | try { | ||
36 | StringBuffer sb = new StringBuffer(); | ||
37 | int age = 0; | ||
38 | if(request.getParameterMap().containsKey("age")) { | ||
39 | try { | ||
40 | age = Integer.parseInt(request.getParameter("age")); | ||
41 | } catch (Exception e) { | ||
42 | response.setStatus(400); | ||
43 | response.getWriter().println("{\"error\":true,\"msg\":\"The specified age parameter is not a valid integer number\"}"); | ||
44 | return; | ||
45 | } | ||
46 | } | ||
47 | |||
48 | if(request.getParameterMap().containsKey("connectionString")) { | ||
49 | // We have a connection string, find the monitor or create it and call getData() on the monitor | ||
50 | |||
51 | // Check that we have a valid connection string | ||
52 | try { | ||
53 | JMXServiceURL url = new JMXServiceURL(request.getParameter("connectionString")); | ||
54 | } catch (Exception e) { | ||
55 | // Error, we need a correct connection string | ||
56 | response.setStatus(400); | ||
57 | response.getWriter().println("{\"error\":true,\"msg\":\"connectionString is not a correct JMX Service URL\"}"); | ||
58 | return; | ||
59 | } | ||
60 | |||
61 | // Try to find the monitor in our list | ||
62 | JmxMon monitor = Registry.findOrCreate(request.getParameter("connectionString")); | ||
63 | |||
64 | // Call getData() | ||
65 | boolean didUpdate = monitor.getData(age); | ||
66 | String name = monitor.getServerName(); | ||
67 | if(didUpdate) { | ||
68 | sb.append("{\"error\":false,\"msg\":\"Sucessfully collected data on instance '" + name + "'\""); | ||
69 | sb.append(",\"ms\":"+monitor.getLastRTms()+"}"); | ||
70 | } else { | ||
71 | response.setStatus(HttpServletResponse.SC_ACCEPTED); | ||
72 | sb.append("{\"error\":false"); | ||
73 | sb.append(",\"msg\":\"Data does not need to be updated on instance '" + name + "' either because another thread did concurrently update the monitor and we just waited for it to complete, or because the age (if) specified was higher than the monitors data age.\""); | ||
74 | sb.append(",\"age\":"+monitor.getAgeTs()+"}"); | ||
75 | } | ||
76 | |||
77 | } else { | ||
78 | // No input, just return the list of monitors | ||
79 | sb.append("{\"count\":" + Registry.getList().size() + "}"); | ||
80 | } | ||
81 | |||
82 | response.getWriter().println(sb.toString()); | ||
83 | |||
84 | } catch (Throwable e) { | ||
85 | response.setStatus(500); | ||
86 | response.getWriter().println("{\"error\":true,\"msg\":\""+e.toString().replace("\n"," ").replace("\"","\\\"").trim()+"\"}"); | ||
87 | e.printStackTrace(); | ||
88 | } | ||
89 | } | ||
90 | } |
1 | javaw.exe -Dcom.sun.management.jmxremote.ssl=false -cp "wls-10.3.6.0.12.1/wljmxclient.jar;jconsole.1.8.0_91.jar" sun.tools.jconsole.JConsole "service:jmx:rmi:///jndi/iiop://u30009:26732/weblogic.management.mbeanservers.runtime" | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | javaw.exe -Dcom.sun.management.jmxremote.ssl=false -cp "wls-10.3.6.0.161018.2/wljmxclient.jar;jconsole.1.8.0_91.jar" sun.tools.jconsole.JConsole "service:jmx:rmi:///jndi/iiop://u30009:26732/weblogic.management.mbeanservers.runtime" | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -374,6 +374,15 @@ public class JmxMon { | ... | @@ -374,6 +374,15 @@ public class JmxMon { |
374 | } | 374 | } |
375 | } | 375 | } |
376 | 376 | ||
377 | public double getHeapCommittedMB() { | ||
378 | LongDelta ld = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:committed"); | ||
379 | if(ld != null) { | ||
380 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
381 | } else { | ||
382 | return 0; | ||
383 | } | ||
384 | } | ||
385 | |||
377 | public double getHeapUsedPercent() { | 386 | public double getHeapUsedPercent() { |
378 | LongDelta ldu = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:used"); | 387 | LongDelta ldu = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:used"); |
379 | LongDelta ldm = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:max"); | 388 | LongDelta ldm = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:max"); |
... | @@ -384,50 +393,30 @@ public class JmxMon { | ... | @@ -384,50 +393,30 @@ public class JmxMon { |
384 | } | 393 | } |
385 | } | 394 | } |
386 | 395 | ||
387 | public double getHeapAllocationRateMBps() { | 396 | public double getGCOverhead() { |
388 | LongDelta ldu = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:used"); | 397 | LongDelta ld1 = null; |
389 | if(ldu != null) { | 398 | LongDelta ld2 = null; |
390 | if(ldu.getPerSecondValue() > 0) { | ||
391 | return ldu.getPerSecondValue()/(1024D*1024D); | ||
392 | } else { | ||
393 | // negative delta, means we had a major GC in the delta, get the last heap size before GC and add it to the last (previous) value | ||
394 | Long beforeGC = null; | ||
395 | if(isGCType(JmxMon.CMS)) { | ||
396 | LongDelta ld1 = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageBeforeGc:CMS Old Gen:used"); | ||
397 | LongDelta ld2 = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageBeforeGc:Par Eden Space:used"); | ||
398 | LongDelta ld3 = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageBeforeGc:Par Survivor Space:used"); | ||
399 | if(ld1 != null && ld2 != null && ld3 != null) | ||
400 | beforeGC = ld1.getCurrentValue() + ld2.getCurrentValue() + ld3.getCurrentValue(); | ||
401 | } else | ||
402 | if(isGCType(JmxMon.PS)) { | 399 | if(isGCType(JmxMon.PS)) { |
403 | LongDelta ld1 = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageBeforeGc:PS Old Gen:used"); | 400 | ld1 = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:CollectionTime"); |
404 | LongDelta ld2 = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageBeforeGc:PS Eden Space:used"); | 401 | ld2 = getLongDelta("java.lang:type=GarbageCollector,name=PS Scavenge:CollectionTime"); |
405 | LongDelta ld3 = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageBeforeGc:PS Survivor Space:used"); | ||
406 | if(ld1 != null && ld2 != null && ld3 != null) | ||
407 | beforeGC = ld1.getCurrentValue() + ld2.getCurrentValue() + ld3.getCurrentValue(); | ||
408 | } | ||
409 | if(beforeGC == null) return 0; | ||
410 | if(ldu.lastValue == null) return 0; | ||
411 | ldu.lastValue = beforeGC + ldu.lastValue; | ||
412 | System.out.println("Adjusted heap size with " + beforeGC + " bytes"); | ||
413 | return ldu.getPerSecondValue()/(1024D*1024D); | ||
414 | } | ||
415 | } else { | ||
416 | return 0; | ||
417 | } | 402 | } |
403 | if(isGCType(JmxMon.CMS)) { | ||
404 | ld1 = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:CollectionTime"); | ||
405 | ld2 = getLongDelta("java.lang:type=GarbageCollector,name=ParNew:CollectionTime"); | ||
418 | } | 406 | } |
419 | 407 | if(ld1 != null && ld2 != null) { | |
420 | public double getPSOldGenUsedMB() { | 408 | return (ld1.getPerSecondValue() + ld2.getPerSecondValue())/10D; |
421 | LongDelta ld = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:used"); | ||
422 | if(ld != null) { | ||
423 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
424 | } else { | 409 | } else { |
425 | return 0; | 410 | return 0; |
426 | } | 411 | } |
427 | } | 412 | } |
428 | 413 | ||
429 | public double getCMSOldGenUsedMB() { | 414 | public double getOldGenUsedMB() { |
430 | LongDelta ld = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:used"); | 415 | LongDelta ld = null; |
416 | if(isGCType(JmxMon.PS)) | ||
417 | ld = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:used"); | ||
418 | if(isGCType(JmxMon.CMS)) | ||
419 | ld = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:used"); | ||
431 | if(ld != null) { | 420 | if(ld != null) { |
432 | return (double)ld.getCurrentValue() / (1024D*1024D); | 421 | return (double)ld.getCurrentValue() / (1024D*1024D); |
433 | } else { | 422 | } else { |
... | @@ -435,19 +424,18 @@ public class JmxMon { | ... | @@ -435,19 +424,18 @@ public class JmxMon { |
435 | } | 424 | } |
436 | } | 425 | } |
437 | 426 | ||
438 | public double getPSOldGenUsedPercent() { | 427 | public double getOldGenUsedPercent() { |
439 | LongDelta ldu = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:used"); | 428 | LongDelta ldu = null; |
440 | LongDelta ldm = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:max"); | 429 | LongDelta ldm = null; |
441 | if(ldu != null && ldm != null) { | 430 | |
442 | return ((double)ldu.getCurrentValue()/(double)ldm.getCurrentValue()) * 100D; | 431 | if(isGCType(JmxMon.PS)) { |
443 | } else { | 432 | ldu = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:used"); |
444 | return 0; | 433 | ldm = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:max"); |
445 | } | 434 | } |
435 | if(isGCType(JmxMon.CMS)) { | ||
436 | ldu = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:used"); | ||
437 | ldm = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:max"); | ||
446 | } | 438 | } |
447 | |||
448 | public double getCMSOldGenUsedPercent() { | ||
449 | LongDelta ldu = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:used"); | ||
450 | LongDelta ldm = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:max"); | ||
451 | if(ldu != null && ldm != null) { | 439 | if(ldu != null && ldm != null) { |
452 | return ((double)ldu.getCurrentValue()/(double)ldm.getCurrentValue()) * 100D; | 440 | return ((double)ldu.getCurrentValue()/(double)ldm.getCurrentValue()) * 100D; |
453 | } else { | 441 | } else { |
... | @@ -455,26 +443,12 @@ public class JmxMon { | ... | @@ -455,26 +443,12 @@ public class JmxMon { |
455 | } | 443 | } |
456 | } | 444 | } |
457 | 445 | ||
458 | public double getPSMarkSweepOldGenAfterGCMB() { | 446 | public double getOldGenAfterGCMB() { |
459 | LongDelta ld = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageAfterGc:PS Old Gen:used"); | 447 | LongDelta ld = null; |
460 | if(ld != null) { | 448 | if(isGCType(JmxMon.PS)) |
461 | return (double)ld.getCurrentValue() / (1024D*1024D); | 449 | ld = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageAfterGc:PS Old Gen:used"); |
462 | } else { | 450 | if(isGCType(JmxMon.CMS)) |
463 | return 0; | 451 | ld = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageAfterGc:CMS Old Gen:used"); |
464 | } | ||
465 | } | ||
466 | |||
467 | public double getCMSMarkSweepOldGenAfterGCMB() { | ||
468 | LongDelta ld = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageAfterGc:CMS Old Gen:used"); | ||
469 | if(ld != null) { | ||
470 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
471 | } else { | ||
472 | return 0; | ||
473 | } | ||
474 | } | ||
475 | |||
476 | public double getPSMarkSweepPermGenAfterGCMB() { | ||
477 | LongDelta ld = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageAfterGc:PS Perm Gen:used"); | ||
478 | if(ld != null) { | 452 | if(ld != null) { |
479 | return (double)ld.getCurrentValue() / (1024D*1024D); | 453 | return (double)ld.getCurrentValue() / (1024D*1024D); |
480 | } else { | 454 | } else { |
... | @@ -482,8 +456,12 @@ public class JmxMon { | ... | @@ -482,8 +456,12 @@ public class JmxMon { |
482 | } | 456 | } |
483 | } | 457 | } |
484 | 458 | ||
485 | public double getCMSMarkSweepPermGenAfterGCMB() { | 459 | public double getPermGenAfterGCMB() { |
486 | LongDelta ld = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageAfterGc:CMS Perm Gen:used"); | 460 | LongDelta ld = null; |
461 | if(isGCType(JmxMon.PS)) | ||
462 | ld = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageAfterGc:PS Perm Gen:used"); | ||
463 | if(isGCType(JmxMon.CMS)) | ||
464 | ld = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageAfterGc:CMS Perm Gen:used"); | ||
487 | if(ld != null) { | 465 | if(ld != null) { |
488 | return (double)ld.getCurrentValue() / (1024D*1024D); | 466 | return (double)ld.getCurrentValue() / (1024D*1024D); |
489 | } else { | 467 | } else { | ... | ... |
... | @@ -21,10 +21,11 @@ public class TestRunner { | ... | @@ -21,10 +21,11 @@ public class TestRunner { |
21 | 21 | ||
22 | //JmxMon mon1 = new JmxMon("service:jmx:iiop:///jndi/iiop://u30457:29722/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 | 22 | //JmxMon mon1 = new JmxMon("service:jmx:iiop:///jndi/iiop://u30457:29722/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 |
23 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30128:23032/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 | 23 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30128:23032/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 |
24 | //JmxMon mon2 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30009:26732/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.12.1 | 24 | JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30009:26732/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.12.1 |
25 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30009:2673/weblogic.management.mbeanservers.runtime"); // Fel port | ||
25 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u02878.ht.kap.rsv.se:17040/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 PS | 26 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u02878.ht.kap.rsv.se:17040/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 PS |
26 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u01891.ef.kap.rsv.se:17020/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 CMS | 27 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u01891.ef.kap.rsv.se:17020/weblogic.management.mbeanservers.runtime"); // 10.3.6.0.161018.2 CMS |
27 | JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30450:34502/weblogic.management.mbeanservers.runtime"); // CMS | 28 | //JmxMon mon1 = new JmxMon("service:jmx:rmi:///jndi/iiop://u30450:34502/weblogic.management.mbeanservers.runtime"); // CMS |
28 | mon1.open(); | 29 | mon1.open(); |
29 | //mon2.open(); | 30 | //mon2.open(); |
30 | jmxList.add(mon1); | 31 | jmxList.add(mon1); |
... | @@ -44,25 +45,19 @@ public class TestRunner { | ... | @@ -44,25 +45,19 @@ public class TestRunner { |
44 | mon.getData(); | 45 | mon.getData(); |
45 | time = System.currentTimeMillis() - ts1; | 46 | time = System.currentTimeMillis() - ts1; |
46 | System.out.println(mon.getServerName() + " called in " + time + "ms"); | 47 | System.out.println(mon.getServerName() + " called in " + time + "ms"); |
47 | System.out.println(" Process CPU %: " + mon.getCPUPercent()); | 48 | System.out.println(" Number of processors #: " + mon.getNumberOfCPUs()); |
49 | System.out.println(" Process CPU Used %: " + mon.getCPUPercent()); | ||
48 | System.out.println(" Process Threads #: " + mon.getThreads()); | 50 | System.out.println(" Process Threads #: " + mon.getThreads()); |
49 | System.out.println(" Process Loaded Classes #: " + mon.getLoadedClassCount()); | 51 | System.out.println(" Process Loaded Classes #: " + mon.getLoadedClassCount()); |
50 | System.out.println(" Process File Descriptors %: " + mon.getSystemFileDescriptorsPercentUsed()); | 52 | System.out.println(" Process File Descriptors %: " + mon.getSystemFileDescriptorsPercentUsed()); |
51 | System.out.println(" Process Heap Used %: " + mon.getHeapUsedPercent()); | 53 | System.out.println(" Process Heap Committed MB: " + mon.getHeapCommittedMB()); |
52 | System.out.println(" Process Heap Used MB: " + mon.getHeapUsedMB()); | 54 | System.out.println(" Process Heap Used MB: " + mon.getHeapUsedMB()); |
53 | System.out.println(" Allocation Rate MB/s: " + mon.getHeapAllocationRateMBps()); | 55 | System.out.println(" Process Heap Used %: " + mon.getHeapUsedPercent()); |
54 | if(mon.isGCType(JmxMon.PS)) { | 56 | System.out.println(" OldGen Used MB: " + mon.getOldGenUsedMB()); |
55 | System.out.println(" PS OldGen Used %: " + mon.getPSOldGenUsedPercent()); | 57 | System.out.println(" OldGen Used %: " + mon.getOldGenUsedPercent()); |
56 | System.out.println(" PS OldGen Used MB: " + mon.getPSOldGenUsedMB()); | 58 | System.out.println(" OldGen After Last GC MB: " + mon.getOldGenAfterGCMB()); |
57 | System.out.println(" PS OldGen After Major GC MB: " + mon.getPSMarkSweepOldGenAfterGCMB()); | 59 | System.out.println(" PermGen After Last GC MB: " + mon.getPermGenAfterGCMB()); |
58 | System.out.println(" PS PermGen After Major GC MB: " + mon.getPSMarkSweepPermGenAfterGCMB()); | 60 | System.out.println(" GC Time (Overhead) %: " + mon.getGCOverhead()); |
59 | } | ||
60 | if(mon.isGCType(JmxMon.CMS)) { | ||
61 | System.out.println(" CMS OldGen Used %: " + mon.getCMSOldGenUsedPercent()); | ||
62 | System.out.println(" CMS OldGen Used MB: " + mon.getCMSOldGenUsedMB()); | ||
63 | System.out.println(" CMS OldGen After Major GC MB: " + mon.getCMSMarkSweepOldGenAfterGCMB()); | ||
64 | System.out.println("CMS PermGen After Major GC MB: " + mon.getCMSMarkSweepPermGenAfterGCMB()); | ||
65 | } | ||
66 | System.out.println(" System Load (per cpu): " + mon.getAverageLoadPerCpu()); | 61 | System.out.println(" System Load (per cpu): " + mon.getAverageLoadPerCpu()); |
67 | System.out.println(" System Load (total): " + mon.getAverageLoad()); | 62 | System.out.println(" System Load (total): " + mon.getAverageLoad()); |
68 | System.out.println(" System Memory %: " + mon.getSystemMemoryPercentUsed()); | 63 | System.out.println(" System Memory %: " + mon.getSystemMemoryPercentUsed()); | ... | ... |
-
Please register or sign in to post a comment