Ny version som hämtar GC info
Dock räknar den fel på Allocation Rate när heap size minskar från föregående sampling.
Showing
4 changed files
with
268 additions
and
31 deletions
LILJM/lib/jconsole_EFwK101_S2.bat
0 → 100644
| 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://u01891.ef.kap.rsv.se:17020/weblogic.management.mbeanservers.runtime" | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
LILJM/lib/jconsole_HTwK115_S3.bat
0 → 100644
| 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://u02878.ht.kap.rsv.se:17040/weblogic.management.mbeanservers.runtime" | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -3,15 +3,12 @@ package se.lil.jm; | ... | @@ -3,15 +3,12 @@ package se.lil.jm; |
| 3 | import java.io.IOException; | 3 | import java.io.IOException; |
| 4 | import java.net.MalformedURLException; | 4 | import java.net.MalformedURLException; |
| 5 | import java.util.HashMap; | 5 | import java.util.HashMap; |
| 6 | import java.util.Set; | 6 | import java.util.HashSet; |
| 7 | import java.util.concurrent.locks.Lock; | 7 | import java.util.concurrent.locks.Lock; |
| 8 | import java.util.concurrent.locks.ReentrantLock; | 8 | import java.util.concurrent.locks.ReentrantLock; |
| 9 | 9 | ||
| 10 | import javax.management.JMX; | 10 | import javax.management.InstanceNotFoundException; |
| 11 | import javax.management.MBeanAttributeInfo; | ||
| 12 | import javax.management.MBeanInfo; | ||
| 13 | import javax.management.MBeanServerConnection; | 11 | import javax.management.MBeanServerConnection; |
| 14 | import javax.management.MalformedObjectNameException; | ||
| 15 | import javax.management.ObjectName; | 12 | import javax.management.ObjectName; |
| 16 | import javax.management.remote.JMXConnector; | 13 | import javax.management.remote.JMXConnector; |
| 17 | import javax.management.remote.JMXConnectorFactory; | 14 | import javax.management.remote.JMXConnectorFactory; |
| ... | @@ -26,6 +23,19 @@ public class JmxMon { | ... | @@ -26,6 +23,19 @@ public class JmxMon { |
| 26 | String serverName = null; | 23 | String serverName = null; |
| 27 | String runtimeName = null; | 24 | String runtimeName = null; |
| 28 | 25 | ||
| 26 | int gcType = 0; | ||
| 27 | public static final int Unknown = 0; | ||
| 28 | public static final int CMS = 1; | ||
| 29 | public static final int PS = 2; | ||
| 30 | |||
| 31 | public boolean isGCType(int type) { | ||
| 32 | return (gcType == type); | ||
| 33 | } | ||
| 34 | |||
| 35 | private void setGCType(int type) { | ||
| 36 | gcType = type; | ||
| 37 | } | ||
| 38 | |||
| 29 | JMXServiceURL url = null; | 39 | JMXServiceURL url = null; |
| 30 | JMXConnector jmxc = null; | 40 | JMXConnector jmxc = null; |
| 31 | MBeanServerConnection mbsc = null; | 41 | MBeanServerConnection mbsc = null; |
| ... | @@ -39,6 +49,19 @@ public class JmxMon { | ... | @@ -39,6 +49,19 @@ public class JmxMon { |
| 39 | HashMap<String, LongDelta> longDeltaMap = new HashMap<String, LongDelta>(); | 49 | HashMap<String, LongDelta> longDeltaMap = new HashMap<String, LongDelta>(); |
| 40 | HashMap<String, DoubleDelta> doubleDeltaMap = new HashMap<String, DoubleDelta>(); | 50 | HashMap<String, DoubleDelta> doubleDeltaMap = new HashMap<String, DoubleDelta>(); |
| 41 | 51 | ||
| 52 | HashSet<String> blocked = new HashSet<String>(); | ||
| 53 | |||
| 54 | public void dumpDeltas() { | ||
| 55 | System.out.println("\nLong Deltas:"); | ||
| 56 | for(String key : longDeltaMap.keySet()) { | ||
| 57 | System.out.println("\"" + key + "\" " + longDeltaMap.get(key).getCurrentValue()); | ||
| 58 | } | ||
| 59 | System.out.println("\nDouble Deltas:"); | ||
| 60 | for(String key : doubleDeltaMap.keySet()) { | ||
| 61 | System.out.println("\"" + key + "\" " + doubleDeltaMap.get(key).getCurrentValue()); | ||
| 62 | } | ||
| 63 | } | ||
| 64 | |||
| 42 | private void updateLongDelta (Long timestamp, String name, Long value) { | 65 | private void updateLongDelta (Long timestamp, String name, Long value) { |
| 43 | LongDelta ld = longDeltaMap.get(name); | 66 | LongDelta ld = longDeltaMap.get(name); |
| 44 | if(ld == null) { | 67 | if(ld == null) { |
| ... | @@ -52,6 +75,10 @@ public class JmxMon { | ... | @@ -52,6 +75,10 @@ public class JmxMon { |
| 52 | return longDeltaMap.get(name + ":" + attribute); | 75 | return longDeltaMap.get(name + ":" + attribute); |
| 53 | } | 76 | } |
| 54 | 77 | ||
| 78 | public LongDelta getLongDelta(String key) { | ||
| 79 | return longDeltaMap.get(key); | ||
| 80 | } | ||
| 81 | |||
| 55 | private void updateDoubleDelta (Long timestamp, String name, Double value) { | 82 | private void updateDoubleDelta (Long timestamp, String name, Double value) { |
| 56 | DoubleDelta dd = doubleDeltaMap.get(name); | 83 | DoubleDelta dd = doubleDeltaMap.get(name); |
| 57 | if(dd == null) { | 84 | if(dd == null) { |
| ... | @@ -65,37 +92,78 @@ public class JmxMon { | ... | @@ -65,37 +92,78 @@ public class JmxMon { |
| 65 | return doubleDeltaMap.get(name + ":" + attribute); | 92 | return doubleDeltaMap.get(name + ":" + attribute); |
| 66 | } | 93 | } |
| 67 | 94 | ||
| 95 | public DoubleDelta getDoubleDelta(String key) { | ||
| 96 | return doubleDeltaMap.get(key); | ||
| 97 | } | ||
| 98 | |||
| 68 | private Object getAttributeValue(String name, String attribute) { | 99 | private Object getAttributeValue(String name, String attribute) { |
| 69 | Object ro = null; | 100 | Object ro = null; |
| 70 | if(mbsc != null) { | 101 | if(mbsc != null) { |
| 71 | try { | 102 | try { |
| 72 | ro = mbsc.getAttribute(new ObjectName(name), attribute); | 103 | if(!blocked.contains(name)) ro = mbsc.getAttribute(new ObjectName(name), attribute); |
| 104 | } catch (InstanceNotFoundException ie) { | ||
| 105 | blocked.add(name); | ||
| 73 | } catch (Exception e) { | 106 | } catch (Exception e) { |
| 74 | ro = e; | ||
| 75 | } | 107 | } |
| 76 | } | 108 | } |
| 77 | return ro; | 109 | return ro; |
| 78 | } | 110 | } |
| 79 | 111 | ||
| 80 | private void fetchUpdateAttribute(String name, String attribute) { | 112 | String lastKeyName = ""; |
| 81 | String fullName = name + ":" + attribute; | 113 | |
| 82 | Object obj = getAttributeValue(name, attribute); | 114 | private void updateCompositeDelta (Long timestamp, String name, CompositeData data) { |
| 83 | Long ts = (Long)getAttributeValue("java.lang:type=Runtime", "Uptime"); | 115 | for(String key : data.getCompositeType().keySet()) { |
| 84 | if(obj != null) { | 116 | String fullName; |
| 85 | if(obj.getClass().equals(java.lang.Long.class)) { | 117 | if(key.equals("value")) fullName = name + ":" + lastKeyName; |
| 86 | updateLongDelta(ts, fullName, (Long)obj); | 118 | else fullName = name + ":" + key; |
| 119 | Object obj = data.get(key); | ||
| 120 | updateDelta(timestamp, fullName, obj); | ||
| 87 | } | 121 | } |
| 88 | if(obj.getClass().equals(java.lang.Integer.class)) { | ||
| 89 | Integer i = (Integer)obj; | ||
| 90 | updateLongDelta(ts, fullName, i.longValue()); | ||
| 91 | } | 122 | } |
| 92 | if(obj.getClass().equals(java.lang.Double.class)) { | 123 | |
| 93 | updateDoubleDelta(ts, fullName, (Double)obj); | 124 | private void updateTabularDelta (Long timestamp, String name, TabularData data) { |
| 125 | for(Object obj : data.values()) { | ||
| 126 | CompositeData cd = (CompositeData)obj; | ||
| 127 | updateCompositeDelta(timestamp, name, cd); | ||
| 94 | } | 128 | } |
| 95 | if(obj.getClass().equals(java.lang.Float.class)) { | ||
| 96 | Float f = (Float)obj; | ||
| 97 | updateDoubleDelta(ts, fullName, f.doubleValue()); | ||
| 98 | } | 129 | } |
| 130 | |||
| 131 | private void updateDelta(Long timestamp, String fullName, Object data) { | ||
| 132 | if(data != null) { | ||
| 133 | if(data.getClass().equals(java.lang.String.class)) { | ||
| 134 | lastKeyName = (String)data; | ||
| 135 | } else | ||
| 136 | if(data.getClass().equals(java.lang.Long.class)) { | ||
| 137 | updateLongDelta(timestamp, fullName, (Long)data); | ||
| 138 | } else | ||
| 139 | if(data.getClass().equals(java.lang.Integer.class)) { | ||
| 140 | Integer i = (Integer)data; | ||
| 141 | updateLongDelta(timestamp, fullName, i.longValue()); | ||
| 142 | } else | ||
| 143 | if(data.getClass().equals(java.lang.Double.class)) { | ||
| 144 | updateDoubleDelta(timestamp, fullName, (Double)data); | ||
| 145 | } else | ||
| 146 | if(data.getClass().equals(java.lang.Float.class)) { | ||
| 147 | Float f = (Float)data; | ||
| 148 | updateDoubleDelta(timestamp, fullName, f.doubleValue()); | ||
| 149 | } else | ||
| 150 | if(data.getClass().equals(javax.management.openmbean.CompositeDataSupport.class)) { | ||
| 151 | updateCompositeDelta(timestamp, fullName, (CompositeData)data); | ||
| 152 | } else | ||
| 153 | if(data.getClass().equals(javax.management.openmbean.TabularDataSupport.class)) { | ||
| 154 | updateTabularDelta(timestamp, fullName, (TabularData)data); | ||
| 155 | } else { | ||
| 156 | System.out.println("Received Unknown Object: " + data.getClass()); | ||
| 157 | } | ||
| 158 | } | ||
| 159 | } | ||
| 160 | |||
| 161 | private void fetchUpdateAttribute(String name, String attribute) { | ||
| 162 | String fullName = name + ":" + attribute; | ||
| 163 | Object obj = getAttributeValue(name, attribute); | ||
| 164 | if(obj != null) { | ||
| 165 | Long ts = (Long)getAttributeValue("java.lang:type=Runtime", "Uptime"); | ||
| 166 | updateDelta(ts, fullName, obj); | ||
| 99 | } | 167 | } |
| 100 | } | 168 | } |
| 101 | 169 | ||
| ... | @@ -204,10 +272,31 @@ public class JmxMon { | ... | @@ -204,10 +272,31 @@ public class JmxMon { |
| 204 | fetchUpdateAttribute("java.lang:type=OperatingSystem", "SystemLoadAverage"); | 272 | fetchUpdateAttribute("java.lang:type=OperatingSystem", "SystemLoadAverage"); |
| 205 | fetchUpdateAttribute("java.lang:type=Threading", "ThreadCount"); | 273 | fetchUpdateAttribute("java.lang:type=Threading", "ThreadCount"); |
| 206 | fetchUpdateAttribute("java.lang:type=ClassLoading", "LoadedClassCount"); | 274 | fetchUpdateAttribute("java.lang:type=ClassLoading", "LoadedClassCount"); |
| 275 | fetchUpdateAttribute("java.lang:type=Memory", "HeapMemoryUsage"); | ||
| 276 | |||
| 277 | // Only get theese if we have the right GC type | ||
| 278 | if(isGCType(JmxMon.Unknown) || isGCType(JmxMon.PS)) { | ||
| 279 | fetchUpdateAttribute("java.lang:type=GarbageCollector,name=PS MarkSweep", "LastGcInfo"); | ||
| 280 | fetchUpdateAttribute("java.lang:type=GarbageCollector,name=PS MarkSweep", "CollectionTime"); | ||
| 281 | fetchUpdateAttribute("java.lang:type=GarbageCollector,name=PS Scavenge", "CollectionTime"); | ||
| 282 | fetchUpdateAttribute("java.lang:type=MemoryPool,name=PS Old Gen", "Usage"); | ||
| 283 | } | ||
| 284 | if(isGCType(JmxMon.Unknown) || isGCType(JmxMon.CMS)) { | ||
| 285 | fetchUpdateAttribute("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep", "LastGcInfo"); | ||
| 286 | fetchUpdateAttribute("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep", "CollectionTime"); | ||
| 287 | fetchUpdateAttribute("java.lang:type=GarbageCollector,name=ParNew", "CollectionTime"); | ||
| 288 | fetchUpdateAttribute("java.lang:type=MemoryPool,name=CMS Old Gen", "Usage"); | ||
| 289 | } | ||
| 207 | // Finished updating data | 290 | // Finished updating data |
| 208 | getDataSucess++; | 291 | getDataSucess++; |
| 209 | lastFetchTSns = System.nanoTime(); | 292 | lastFetchTSns = System.nanoTime(); |
| 210 | lastRTns = lastFetchTSns - startTSns; | 293 | lastRTns = lastFetchTSns - startTSns; |
| 294 | |||
| 295 | // Check the GC type if not known | ||
| 296 | if(isGCType(JmxMon.Unknown)) { | ||
| 297 | if(longDeltaMap.containsKey("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:CollectionTime")) setGCType(JmxMon.CMS); | ||
| 298 | if(longDeltaMap.containsKey("java.lang:type=GarbageCollector,name=PS MarkSweep:CollectionTime")) setGCType(JmxMon.PS); | ||
| 299 | } | ||
| 211 | return true; | 300 | return true; |
| 212 | } catch (Throwable e) { | 301 | } catch (Throwable e) { |
| 213 | throw (e); | 302 | throw (e); |
| ... | @@ -276,6 +365,132 @@ public class JmxMon { | ... | @@ -276,6 +365,132 @@ public class JmxMon { |
| 276 | return (open/max) * 100D; | 365 | return (open/max) * 100D; |
| 277 | } | 366 | } |
| 278 | 367 | ||
| 368 | public double getHeapUsedMB() { | ||
| 369 | LongDelta ld = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:used"); | ||
| 370 | if(ld != null) { | ||
| 371 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
| 372 | } else { | ||
| 373 | return 0; | ||
| 374 | } | ||
| 375 | } | ||
| 376 | |||
| 377 | public double getHeapUsedPercent() { | ||
| 378 | LongDelta ldu = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:used"); | ||
| 379 | LongDelta ldm = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:max"); | ||
| 380 | if(ldu != null && ldm != null) { | ||
| 381 | return ((double)ldu.getCurrentValue()/(double)ldm.getCurrentValue()) * 100D; | ||
| 382 | } else { | ||
| 383 | return 0; | ||
| 384 | } | ||
| 385 | } | ||
| 386 | |||
| 387 | public double getHeapAllocationRateMBps() { | ||
| 388 | LongDelta ldu = getLongDelta("java.lang:type=Memory:HeapMemoryUsage:used"); | ||
| 389 | if(ldu != 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)) { | ||
| 403 | LongDelta ld1 = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageBeforeGc:PS Old Gen:used"); | ||
| 404 | LongDelta ld2 = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageBeforeGc:PS Eden Space:used"); | ||
| 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 | } | ||
| 418 | } | ||
| 419 | |||
| 420 | public double getPSOldGenUsedMB() { | ||
| 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 { | ||
| 425 | return 0; | ||
| 426 | } | ||
| 427 | } | ||
| 428 | |||
| 429 | public double getCMSOldGenUsedMB() { | ||
| 430 | LongDelta ld = getLongDelta("java.lang:type=MemoryPool,name=CMS Old Gen:Usage:used"); | ||
| 431 | if(ld != null) { | ||
| 432 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
| 433 | } else { | ||
| 434 | return 0; | ||
| 435 | } | ||
| 436 | } | ||
| 437 | |||
| 438 | public double getPSOldGenUsedPercent() { | ||
| 439 | LongDelta ldu = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:used"); | ||
| 440 | LongDelta ldm = getLongDelta("java.lang:type=MemoryPool,name=PS Old Gen:Usage:max"); | ||
| 441 | if(ldu != null && ldm != null) { | ||
| 442 | return ((double)ldu.getCurrentValue()/(double)ldm.getCurrentValue()) * 100D; | ||
| 443 | } else { | ||
| 444 | return 0; | ||
| 445 | } | ||
| 446 | } | ||
| 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) { | ||
| 452 | return ((double)ldu.getCurrentValue()/(double)ldm.getCurrentValue()) * 100D; | ||
| 453 | } else { | ||
| 454 | return 0; | ||
| 455 | } | ||
| 456 | } | ||
| 457 | |||
| 458 | public double getPSMarkSweepOldGenAfterGCMB() { | ||
| 459 | LongDelta ld = getLongDelta("java.lang:type=GarbageCollector,name=PS MarkSweep:LastGcInfo:memoryUsageAfterGc:PS Old Gen:used"); | ||
| 460 | if(ld != null) { | ||
| 461 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
| 462 | } else { | ||
| 463 | return 0; | ||
| 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) { | ||
| 479 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
| 480 | } else { | ||
| 481 | return 0; | ||
| 482 | } | ||
| 483 | } | ||
| 484 | |||
| 485 | public double getCMSMarkSweepPermGenAfterGCMB() { | ||
| 486 | LongDelta ld = getLongDelta("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep:LastGcInfo:memoryUsageAfterGc:CMS Perm Gen:used"); | ||
| 487 | if(ld != null) { | ||
| 488 | return (double)ld.getCurrentValue() / (1024D*1024D); | ||
| 489 | } else { | ||
| 490 | return 0; | ||
| 491 | } | ||
| 492 | } | ||
| 493 | |||
| 279 | public JmxMon() { | 494 | public JmxMon() { |
| 280 | } | 495 | } |
| 281 | 496 | ... | ... |
| ... | @@ -19,9 +19,12 @@ public class TestRunner { | ... | @@ -19,9 +19,12 @@ public class TestRunner { |
| 19 | 19 | ||
| 20 | Long ts1 = System.currentTimeMillis(); | 20 | Long ts1 = System.currentTimeMillis(); |
| 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 mon2 = 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://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://u30450:34502/weblogic.management.mbeanservers.runtime"); // CMS | ||
| 25 | mon1.open(); | 28 | mon1.open(); |
| 26 | //mon2.open(); | 29 | //mon2.open(); |
| 27 | jmxList.add(mon1); | 30 | jmxList.add(mon1); |
| ... | @@ -41,16 +44,33 @@ public class TestRunner { | ... | @@ -41,16 +44,33 @@ public class TestRunner { |
| 41 | mon.getData(); | 44 | mon.getData(); |
| 42 | time = System.currentTimeMillis() - ts1; | 45 | time = System.currentTimeMillis() - ts1; |
| 43 | System.out.println(mon.getServerName() + " called in " + time + "ms"); | 46 | System.out.println(mon.getServerName() + " called in " + time + "ms"); |
| 44 | System.out.println(mon.getServerName() + " Process CPU %: " + mon.getCPUPercent()); | 47 | System.out.println(" Process CPU %: " + mon.getCPUPercent()); |
| 45 | System.out.println(mon.getServerName() + " Process Threads #: " + mon.getThreads()); | 48 | System.out.println(" Process Threads #: " + mon.getThreads()); |
| 46 | System.out.println(mon.getServerName() + " Process Loaded Classes #: " + mon.getLoadedClassCount()); | 49 | System.out.println(" Process Loaded Classes #: " + mon.getLoadedClassCount()); |
| 47 | System.out.println(mon.getServerName() + " Process File Descriptors %: " + mon.getSystemFileDescriptorsPercentUsed()); | 50 | System.out.println(" Process File Descriptors %: " + mon.getSystemFileDescriptorsPercentUsed()); |
| 48 | System.out.println(mon.getServerName() + " System Load (per cpu): " + mon.getAverageLoadPerCpu()); | 51 | System.out.println(" Process Heap Used %: " + mon.getHeapUsedPercent()); |
| 49 | System.out.println(mon.getServerName() + " System Load (total): " + mon.getAverageLoad()); | 52 | System.out.println(" Process Heap Used MB: " + mon.getHeapUsedMB()); |
| 50 | System.out.println(mon.getServerName() + " System Memory %: " + mon.getSystemMemoryPercentUsed()); | 53 | System.out.println(" Allocation Rate MB/s: " + mon.getHeapAllocationRateMBps()); |
| 51 | System.out.println(mon.getServerName() + " System Swap %: " + mon.getSystemSwapPercentUsed()); | 54 | if(mon.isGCType(JmxMon.PS)) { |
| 55 | System.out.println(" PS OldGen Used %: " + mon.getPSOldGenUsedPercent()); | ||
| 56 | System.out.println(" PS OldGen Used MB: " + mon.getPSOldGenUsedMB()); | ||
| 57 | System.out.println(" PS OldGen After Major GC MB: " + mon.getPSMarkSweepOldGenAfterGCMB()); | ||
| 58 | System.out.println(" PS PermGen After Major GC MB: " + mon.getPSMarkSweepPermGenAfterGCMB()); | ||
| 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()); | ||
| 67 | System.out.println(" System Load (total): " + mon.getAverageLoad()); | ||
| 68 | System.out.println(" System Memory %: " + mon.getSystemMemoryPercentUsed()); | ||
| 69 | System.out.println(" System Swap %: " + mon.getSystemSwapPercentUsed()); | ||
| 52 | 70 | ||
| 53 | System.out.println(); | 71 | System.out.println(); |
| 72 | |||
| 73 | //mon.dumpDeltas(); | ||
| 54 | } | 74 | } |
| 55 | Thread.sleep(15000); | 75 | Thread.sleep(15000); |
| 56 | } | 76 | } | ... | ... |
-
Please register or sign in to post a comment