|
1 /* |
|
2 * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. |
|
8 * |
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
|
13 * accompanied this code). |
|
14 * |
|
15 * You should have received a copy of the GNU General Public License version |
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 * |
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
20 * or visit www.oracle.com if you need additional information or have any |
|
21 * questions. |
|
22 */ |
|
23 |
|
24 /* |
|
25 * @test |
|
26 * @bug 8058865 |
|
27 * @summary Test all MXBeans available by default on the platform |
|
28 * @author Olivier Lagneau |
|
29 * @modules java.management |
|
30 * @library /lib/testlibrary |
|
31 * @run main/othervm/timeout=300 -DDEBUG_STANDARD MXBeanInteropTest1 |
|
32 */ |
|
33 |
|
34 import java.util.Arrays; |
|
35 import java.util.Iterator; |
|
36 import java.util.Map; |
|
37 import java.util.Set; |
|
38 |
|
39 import java.lang.management.ClassLoadingMXBean; |
|
40 import java.lang.management.CompilationMXBean; |
|
41 import java.lang.management.GarbageCollectorMXBean; |
|
42 import java.lang.management.ManagementFactory; |
|
43 import java.lang.management.MemoryMXBean; |
|
44 import java.lang.management.MemoryManagerMXBean; |
|
45 import java.lang.management.MemoryPoolMXBean; |
|
46 import java.lang.management.OperatingSystemMXBean; |
|
47 import java.lang.management.RuntimeMXBean; |
|
48 import java.lang.management.ThreadMXBean; |
|
49 |
|
50 import javax.management.JMX; |
|
51 import javax.management.MBeanAttributeInfo; |
|
52 import javax.management.MBeanConstructorInfo; |
|
53 import javax.management.MBeanServer; |
|
54 import javax.management.MBeanServerFactory; |
|
55 import javax.management.MBeanInfo; |
|
56 import javax.management.MBeanNotificationInfo; |
|
57 import javax.management.MBeanOperationInfo; |
|
58 import javax.management.MBeanServerConnection; |
|
59 import javax.management.ObjectName; |
|
60 import javax.management.remote.JMXConnector; |
|
61 import javax.management.remote.JMXConnectorFactory; |
|
62 import javax.management.remote.JMXConnectorServer; |
|
63 import javax.management.remote.JMXConnectorServerFactory; |
|
64 import javax.management.remote.JMXServiceURL; |
|
65 |
|
66 public class MXBeanInteropTest1 { |
|
67 |
|
68 /* |
|
69 * First Debug properties and arguments are collect in expected |
|
70 * map (argName, value) format, then calls original test's run method. |
|
71 */ |
|
72 public static void main(String args[]) throws Exception { |
|
73 |
|
74 System.out.println("================================================="); |
|
75 |
|
76 // Parses parameters |
|
77 Utils.parseDebugProperties(); |
|
78 Map<String, Object> map = Utils.parseParameters(args) ; |
|
79 |
|
80 // Run test |
|
81 MXBeanInteropTest1 test = new MXBeanInteropTest1(); |
|
82 test.run(map); |
|
83 |
|
84 } |
|
85 |
|
86 public void run(Map<String, Object> args) { |
|
87 |
|
88 System.out.println("MXBeanInteropTest1::run: Start") ; |
|
89 int errorCount = 0 ; |
|
90 |
|
91 try { |
|
92 // JMX MbeanServer used inside single VM as if remote. |
|
93 // MBeanServer mbs = MBeanServerFactory.newMBeanServer(); |
|
94 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); |
|
95 |
|
96 JMXServiceURL url = new JMXServiceURL("rmi", null, 0); |
|
97 JMXConnectorServer cs = |
|
98 JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); |
|
99 cs.start(); |
|
100 |
|
101 JMXServiceURL addr = cs.getAddress(); |
|
102 JMXConnector cc = JMXConnectorFactory.connect(addr); |
|
103 MBeanServerConnection mbsc = cc.getMBeanServerConnection(); |
|
104 |
|
105 // Print out registered java.lang.management MXBeans found |
|
106 // in the remote jvm. |
|
107 printMBeans(mbsc) ; |
|
108 |
|
109 // For each possible kind of JDK 5 defined MXBean, we retrieve its |
|
110 // MBeanInfo and print it and we call all getters and print |
|
111 // their output. |
|
112 errorCount += doClassLoadingMXBeanTest(mbsc) ; |
|
113 errorCount += doMemoryMXBeanTest(mbsc) ; |
|
114 errorCount += doThreadMXBeanTest(mbsc) ; |
|
115 errorCount += doRuntimeMXBeanTest(mbsc) ; |
|
116 errorCount += doOperatingSystemMXBeanTest(mbsc) ; |
|
117 errorCount += doCompilationMXBeanTest(mbsc) ; |
|
118 errorCount += doGarbageCollectorMXBeanTest(mbsc) ; |
|
119 errorCount += doMemoryManagerMXBeanTest(mbsc) ; |
|
120 errorCount += doMemoryPoolMXBeanTest(mbsc) ; |
|
121 |
|
122 // Terminate the JMX Client |
|
123 cc.close(); |
|
124 |
|
125 } catch(Exception e) { |
|
126 Utils.printThrowable(e, true) ; |
|
127 throw new RuntimeException(e); |
|
128 } |
|
129 |
|
130 if ( errorCount == 0 ) { |
|
131 System.out.println("MXBeanInteropTest1::run: Done without any error") ; |
|
132 } else { |
|
133 System.out.println("MXBeanInteropTest1::run: Done with " |
|
134 + errorCount |
|
135 + " error(s)") ; |
|
136 throw new RuntimeException("errorCount = " + errorCount); |
|
137 } |
|
138 } |
|
139 |
|
140 /** |
|
141 * Prints all MBeans of domain java.lang. |
|
142 * They are MBeans related to the JSR 174 that defines |
|
143 * package java.lang.management. |
|
144 */ |
|
145 private static void printMBeans(MBeanServerConnection mbsc) throws Exception { |
|
146 ObjectName filterName = new ObjectName("java.lang:*"); |
|
147 Set<ObjectName> set = mbsc.queryNames(filterName, null); |
|
148 |
|
149 if ( set.size() == 0 ) { |
|
150 throw new RuntimeException("(ERROR) No MBean found with filter " |
|
151 + filterName); |
|
152 } |
|
153 |
|
154 System.out.println("---- MBeans found in domain java.lang :"); |
|
155 |
|
156 for (Iterator<ObjectName> iter = set.iterator(); iter.hasNext(); ) { |
|
157 System.out.println(iter.next().toString()); |
|
158 } |
|
159 |
|
160 System.out.println("\n") ; |
|
161 } |
|
162 |
|
163 |
|
164 private final int doClassLoadingMXBeanTest(MBeanServerConnection mbsc) { |
|
165 int errorCount = 0 ; |
|
166 System.out.println("---- ClassLoadingMXBean") ; |
|
167 |
|
168 try { |
|
169 ObjectName classLoadingName = |
|
170 new ObjectName(ManagementFactory.CLASS_LOADING_MXBEAN_NAME) ; |
|
171 MBeanInfo mbInfo = mbsc.getMBeanInfo(classLoadingName); |
|
172 errorCount += checkNonEmpty(mbInfo); |
|
173 System.out.println("getMBeanInfo\t\t" |
|
174 + mbInfo); |
|
175 ClassLoadingMXBean classLoading = null; |
|
176 |
|
177 classLoading = JMX.newMXBeanProxy(mbsc, |
|
178 classLoadingName, |
|
179 ClassLoadingMXBean.class) ; |
|
180 System.out.println("getLoadedClassCount\t\t" |
|
181 + classLoading.getLoadedClassCount()); |
|
182 System.out.println("getTotalLoadedClassCount\t\t" |
|
183 + classLoading.getTotalLoadedClassCount()); |
|
184 System.out.println("getUnloadedClassCount\t\t" |
|
185 + classLoading.getUnloadedClassCount()); |
|
186 System.out.println("isVerbose\t\t" |
|
187 + classLoading.isVerbose()); |
|
188 |
|
189 System.out.println("---- OK\n") ; |
|
190 |
|
191 } catch (Exception e) { |
|
192 Utils.printThrowable(e, true) ; |
|
193 errorCount++ ; |
|
194 System.out.println("---- ERROR\n") ; |
|
195 } |
|
196 |
|
197 return errorCount ; |
|
198 } |
|
199 |
|
200 |
|
201 private final int doMemoryMXBeanTest(MBeanServerConnection mbsc) { |
|
202 int errorCount = 0 ; |
|
203 System.out.println("---- MemoryMXBean") ; |
|
204 |
|
205 try { |
|
206 ObjectName memoryName = |
|
207 new ObjectName(ManagementFactory.MEMORY_MXBEAN_NAME) ; |
|
208 MBeanInfo mbInfo = mbsc.getMBeanInfo(memoryName); |
|
209 errorCount += checkNonEmpty(mbInfo); |
|
210 System.out.println("getMBeanInfo\t\t" |
|
211 + mbInfo); |
|
212 MemoryMXBean memory = null ; |
|
213 |
|
214 memory = |
|
215 JMX.newMXBeanProxy(mbsc, |
|
216 memoryName, |
|
217 MemoryMXBean.class, |
|
218 true) ; |
|
219 System.out.println("getMemoryHeapUsage\t\t" |
|
220 + memory.getHeapMemoryUsage()); |
|
221 System.out.println("getNonHeapMemoryHeapUsage\t\t" |
|
222 + memory.getNonHeapMemoryUsage()); |
|
223 System.out.println("getObjectPendingFinalizationCount\t\t" |
|
224 + memory.getObjectPendingFinalizationCount()); |
|
225 System.out.println("isVerbose\t\t" |
|
226 + memory.isVerbose()); |
|
227 |
|
228 System.out.println("---- OK\n") ; |
|
229 |
|
230 } catch (Exception e) { |
|
231 Utils.printThrowable(e, true) ; |
|
232 errorCount++ ; |
|
233 System.out.println("---- ERROR\n") ; |
|
234 } |
|
235 |
|
236 return errorCount ; |
|
237 } |
|
238 |
|
239 |
|
240 private final int doThreadMXBeanTest(MBeanServerConnection mbsc) { |
|
241 int errorCount = 0 ; |
|
242 System.out.println("---- ThreadMXBean") ; |
|
243 |
|
244 try { |
|
245 ObjectName threadName = |
|
246 new ObjectName(ManagementFactory.THREAD_MXBEAN_NAME) ; |
|
247 MBeanInfo mbInfo = mbsc.getMBeanInfo(threadName); |
|
248 errorCount += checkNonEmpty(mbInfo); |
|
249 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
250 ThreadMXBean thread = null ; |
|
251 |
|
252 thread = |
|
253 JMX.newMXBeanProxy(mbsc, |
|
254 threadName, |
|
255 ThreadMXBean.class) ; |
|
256 System.out.println("findMonitorDeadlockedThreads\t\t" |
|
257 + thread.findMonitorDeadlockedThreads()); |
|
258 long[] threadIDs = thread.getAllThreadIds() ; |
|
259 System.out.println("getAllThreadIds\t\t" |
|
260 + threadIDs); |
|
261 |
|
262 for ( long threadID : threadIDs ) { |
|
263 System.out.println("getThreadInfo long\t\t" |
|
264 + thread.getThreadInfo(threadID)); |
|
265 System.out.println("getThreadInfo long, int\t\t" |
|
266 + thread.getThreadInfo(threadID, 2)); |
|
267 } |
|
268 |
|
269 System.out.println("getThreadInfo long[]\t\t" |
|
270 + thread.getThreadInfo(threadIDs)); |
|
271 System.out.println("getThreadInfo long[], int\t\t" |
|
272 + thread.getThreadInfo(threadIDs, 2)); |
|
273 System.out.println("getDaemonThreadCount\t\t" |
|
274 + thread.getDaemonThreadCount()); |
|
275 System.out.println("getPeakThreadCount\t\t" |
|
276 + thread.getPeakThreadCount()); |
|
277 System.out.println("getThreadCount\t\t" |
|
278 + thread.getThreadCount()); |
|
279 System.out.println("getTotalStartedThreadCount\t\t" |
|
280 + thread.getTotalStartedThreadCount()); |
|
281 boolean supported = thread.isThreadContentionMonitoringSupported() ; |
|
282 System.out.println("isThreadContentionMonitoringSupported\t\t" |
|
283 + supported); |
|
284 |
|
285 if ( supported ) { |
|
286 System.out.println("isThreadContentionMonitoringEnabled\t\t" |
|
287 + thread.isThreadContentionMonitoringEnabled()); |
|
288 } |
|
289 |
|
290 supported = thread.isThreadCpuTimeSupported() ; |
|
291 System.out.println("isThreadCpuTimeSupported\t\t" |
|
292 + supported); |
|
293 |
|
294 if ( supported ) { |
|
295 System.out.println("isThreadCpuTimeEnabled\t\t" |
|
296 + thread.isThreadCpuTimeEnabled()); |
|
297 |
|
298 for (long id : threadIDs) { |
|
299 System.out.println("getThreadCpuTime(" + id + ")\t\t" |
|
300 + thread.getThreadCpuTime(id)); |
|
301 System.out.println("getThreadUserTime(" + id + ")\t\t" |
|
302 + thread.getThreadUserTime(id)); |
|
303 } |
|
304 } |
|
305 |
|
306 supported = thread.isCurrentThreadCpuTimeSupported() ; |
|
307 System.out.println("isCurrentThreadCpuTimeSupported\t\t" |
|
308 + supported); |
|
309 |
|
310 if ( supported ) { |
|
311 System.out.println("getCurrentThreadCpuTime\t\t" |
|
312 + thread.getCurrentThreadCpuTime()); |
|
313 System.out.println("getCurrentThreadUserTime\t\t" |
|
314 + thread.getCurrentThreadUserTime()); |
|
315 } |
|
316 |
|
317 thread.resetPeakThreadCount() ; |
|
318 |
|
319 System.out.println("---- OK\n") ; |
|
320 } catch (Exception e) { |
|
321 Utils.printThrowable(e, true) ; |
|
322 errorCount++ ; |
|
323 System.out.println("---- ERROR\n") ; |
|
324 } |
|
325 |
|
326 return errorCount ; |
|
327 } |
|
328 |
|
329 |
|
330 private final int doRuntimeMXBeanTest(MBeanServerConnection mbsc) { |
|
331 int errorCount = 0 ; |
|
332 System.out.println("---- RuntimeMXBean") ; |
|
333 |
|
334 try { |
|
335 ObjectName runtimeName = |
|
336 new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME) ; |
|
337 MBeanInfo mbInfo = mbsc.getMBeanInfo(runtimeName); |
|
338 errorCount += checkNonEmpty(mbInfo); |
|
339 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
340 RuntimeMXBean runtime = null; |
|
341 |
|
342 runtime = |
|
343 JMX.newMXBeanProxy(mbsc, |
|
344 runtimeName, |
|
345 RuntimeMXBean.class) ; |
|
346 System.out.println("getClassPath\t\t" |
|
347 + runtime.getClassPath()); |
|
348 System.out.println("getInputArguments\t\t" |
|
349 + runtime.getInputArguments()); |
|
350 System.out.println("getLibraryPath\t\t" |
|
351 + runtime.getLibraryPath()); |
|
352 System.out.println("getManagementSpecVersion\t\t" |
|
353 + runtime.getManagementSpecVersion()); |
|
354 System.out.println("getName\t\t" |
|
355 + runtime.getName()); |
|
356 System.out.println("getSpecName\t\t" |
|
357 + runtime.getSpecName()); |
|
358 System.out.println("getSpecVendor\t\t" |
|
359 + runtime.getSpecVendor()); |
|
360 System.out.println("getSpecVersion\t\t" |
|
361 + runtime.getSpecVersion()); |
|
362 System.out.println("getStartTime\t\t" |
|
363 + runtime.getStartTime()); |
|
364 System.out.println("getSystemProperties\t\t" |
|
365 + runtime.getSystemProperties()); |
|
366 System.out.println("getUptime\t\t" |
|
367 + runtime.getUptime()); |
|
368 System.out.println("getVmName\t\t" |
|
369 + runtime.getVmName()); |
|
370 System.out.println("getVmVendor\t\t" |
|
371 + runtime.getVmVendor()); |
|
372 System.out.println("getVmVersion\t\t" |
|
373 + runtime.getVmVersion()); |
|
374 boolean supported = runtime.isBootClassPathSupported() ; |
|
375 System.out.println("isBootClassPathSupported\t\t" |
|
376 + supported); |
|
377 |
|
378 if ( supported ) { |
|
379 System.out.println("getBootClassPath\t\t" |
|
380 + runtime.getBootClassPath()); |
|
381 } |
|
382 |
|
383 System.out.println("---- OK\n") ; |
|
384 } catch (Exception e) { |
|
385 Utils.printThrowable(e, true) ; |
|
386 errorCount++ ; |
|
387 System.out.println("---- ERROR\n") ; |
|
388 } |
|
389 |
|
390 return errorCount ; |
|
391 } |
|
392 |
|
393 |
|
394 private final int doOperatingSystemMXBeanTest(MBeanServerConnection mbsc) { |
|
395 int errorCount = 0 ; |
|
396 System.out.println("---- OperatingSystemMXBean") ; |
|
397 |
|
398 try { |
|
399 ObjectName operationName = |
|
400 new ObjectName(ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME) ; |
|
401 MBeanInfo mbInfo = mbsc.getMBeanInfo(operationName); |
|
402 errorCount += checkNonEmpty(mbInfo); |
|
403 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
404 OperatingSystemMXBean operation = null ; |
|
405 |
|
406 operation = |
|
407 JMX.newMXBeanProxy(mbsc, |
|
408 operationName, |
|
409 OperatingSystemMXBean.class) ; |
|
410 System.out.println("getArch\t\t" |
|
411 + operation.getArch()); |
|
412 System.out.println("getAvailableProcessors\t\t" |
|
413 + operation.getAvailableProcessors()); |
|
414 System.out.println("getName\t\t" |
|
415 + operation.getName()); |
|
416 System.out.println("getVersion\t\t" |
|
417 + operation.getVersion()); |
|
418 |
|
419 System.out.println("---- OK\n") ; |
|
420 } catch (Exception e) { |
|
421 Utils.printThrowable(e, true) ; |
|
422 errorCount++ ; |
|
423 System.out.println("---- ERROR\n") ; |
|
424 } |
|
425 |
|
426 return errorCount ; |
|
427 } |
|
428 |
|
429 |
|
430 private final int doCompilationMXBeanTest(MBeanServerConnection mbsc) { |
|
431 int errorCount = 0 ; |
|
432 System.out.println("---- CompilationMXBean") ; |
|
433 |
|
434 try { |
|
435 ObjectName compilationName = |
|
436 new ObjectName(ManagementFactory.COMPILATION_MXBEAN_NAME); |
|
437 |
|
438 if ( mbsc.isRegistered(compilationName) ) { |
|
439 MBeanInfo mbInfo = mbsc.getMBeanInfo(compilationName); |
|
440 errorCount += checkNonEmpty(mbInfo); |
|
441 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
442 CompilationMXBean compilation = null ; |
|
443 |
|
444 compilation = |
|
445 JMX.newMXBeanProxy(mbsc, |
|
446 compilationName, |
|
447 CompilationMXBean.class) ; |
|
448 System.out.println("getName\t\t" |
|
449 + compilation.getName()); |
|
450 boolean supported = |
|
451 compilation.isCompilationTimeMonitoringSupported() ; |
|
452 System.out.println("isCompilationTimeMonitoringSupported\t\t" |
|
453 + supported); |
|
454 |
|
455 if ( supported ) { |
|
456 System.out.println("getTotalCompilationTime\t\t" |
|
457 + compilation.getTotalCompilationTime()); |
|
458 } |
|
459 } |
|
460 |
|
461 System.out.println("---- OK\n") ; |
|
462 } catch (Exception e) { |
|
463 Utils.printThrowable(e, true) ; |
|
464 errorCount++ ; |
|
465 System.out.println("---- ERROR\n") ; |
|
466 } |
|
467 |
|
468 return errorCount ; |
|
469 } |
|
470 |
|
471 |
|
472 private final int doGarbageCollectorMXBeanTest(MBeanServerConnection mbsc) { |
|
473 int errorCount = 0 ; |
|
474 System.out.println("---- GarbageCollectorMXBean") ; |
|
475 |
|
476 try { |
|
477 ObjectName filterName = |
|
478 new ObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE |
|
479 + ",*"); |
|
480 Set<ObjectName> onSet = mbsc.queryNames(filterName, null); |
|
481 |
|
482 for (Iterator<ObjectName> iter = onSet.iterator(); iter.hasNext(); ) { |
|
483 ObjectName garbageName = iter.next() ; |
|
484 System.out.println("-------- " + garbageName) ; |
|
485 MBeanInfo mbInfo = mbsc.getMBeanInfo(garbageName); |
|
486 errorCount += checkNonEmpty(mbInfo); |
|
487 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
488 GarbageCollectorMXBean garbage = null ; |
|
489 |
|
490 garbage = |
|
491 JMX.newMXBeanProxy(mbsc, |
|
492 garbageName, |
|
493 GarbageCollectorMXBean.class) ; |
|
494 System.out.println("getCollectionCount\t\t" |
|
495 + garbage.getCollectionCount()); |
|
496 System.out.println("getCollectionTime\t\t" |
|
497 + garbage.getCollectionTime()); |
|
498 } |
|
499 |
|
500 System.out.println("---- OK\n") ; |
|
501 } catch (Exception e) { |
|
502 Utils.printThrowable(e, true) ; |
|
503 errorCount++ ; |
|
504 System.out.println("---- ERROR\n") ; |
|
505 } |
|
506 |
|
507 return errorCount ; |
|
508 } |
|
509 |
|
510 |
|
511 private final int doMemoryManagerMXBeanTest(MBeanServerConnection mbsc) { |
|
512 int errorCount = 0 ; |
|
513 System.out.println("---- MemoryManagerMXBean") ; |
|
514 |
|
515 try { |
|
516 ObjectName filterName = |
|
517 new ObjectName(ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE |
|
518 + ",*"); |
|
519 Set<ObjectName> onSet = mbsc.queryNames(filterName, null); |
|
520 |
|
521 for (Iterator<ObjectName> iter = onSet.iterator(); iter.hasNext(); ) { |
|
522 ObjectName memoryManagerName = iter.next() ; |
|
523 System.out.println("-------- " + memoryManagerName) ; |
|
524 MBeanInfo mbInfo = mbsc.getMBeanInfo(memoryManagerName); |
|
525 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
526 errorCount += checkNonEmpty(mbInfo); |
|
527 MemoryManagerMXBean memoryManager = null; |
|
528 |
|
529 memoryManager = |
|
530 JMX.newMXBeanProxy(mbsc, |
|
531 memoryManagerName, |
|
532 MemoryManagerMXBean.class) ; |
|
533 System.out.println("getMemoryPoolNames\t\t" |
|
534 + Arrays.deepToString(memoryManager.getMemoryPoolNames())); |
|
535 System.out.println("getName\t\t" |
|
536 + memoryManager.getName()); |
|
537 System.out.println("isValid\t\t" |
|
538 + memoryManager.isValid()); |
|
539 } |
|
540 |
|
541 System.out.println("---- OK\n") ; |
|
542 } catch (Exception e) { |
|
543 Utils.printThrowable(e, true) ; |
|
544 errorCount++ ; |
|
545 System.out.println("---- ERROR\n") ; |
|
546 } |
|
547 |
|
548 return errorCount ; |
|
549 } |
|
550 |
|
551 |
|
552 private final int doMemoryPoolMXBeanTest(MBeanServerConnection mbsc) { |
|
553 int errorCount = 0 ; |
|
554 System.out.println("---- MemoryPoolMXBean") ; |
|
555 |
|
556 try { |
|
557 ObjectName filterName = |
|
558 new ObjectName(ManagementFactory.MEMORY_POOL_MXBEAN_DOMAIN_TYPE |
|
559 + ",*"); |
|
560 Set<ObjectName> onSet = mbsc.queryNames(filterName, null); |
|
561 |
|
562 for (Iterator<ObjectName> iter = onSet.iterator(); iter.hasNext(); ) { |
|
563 ObjectName memoryPoolName = iter.next() ; |
|
564 System.out.println("-------- " + memoryPoolName) ; |
|
565 MBeanInfo mbInfo = mbsc.getMBeanInfo(memoryPoolName); |
|
566 errorCount += checkNonEmpty(mbInfo); |
|
567 System.out.println("getMBeanInfo\t\t" + mbInfo); |
|
568 MemoryPoolMXBean memoryPool = null; |
|
569 |
|
570 memoryPool = |
|
571 JMX.newMXBeanProxy(mbsc, |
|
572 memoryPoolName, |
|
573 MemoryPoolMXBean.class, |
|
574 true) ; |
|
575 System.out.println("getCollectionUsage\t\t" |
|
576 + memoryPool.getCollectionUsage()); |
|
577 System.out.println("getMemoryManagerNames\t\t" |
|
578 + Arrays.deepToString(memoryPool.getMemoryManagerNames())); |
|
579 System.out.println("getName\t\t" |
|
580 + memoryPool.getName()); |
|
581 System.out.println("getPeakUsage\t\t" |
|
582 + memoryPool.getPeakUsage()); |
|
583 System.out.println("getType\t\t" |
|
584 + memoryPool.getType()); |
|
585 System.out.println("getUsage\t\t" |
|
586 + memoryPool.getUsage()); |
|
587 System.out.println("isValid\t\t" |
|
588 + memoryPool.isValid()); |
|
589 boolean supported = memoryPool.isUsageThresholdSupported() ; |
|
590 System.out.println("isUsageThresholdSupported\t\t" |
|
591 + supported); |
|
592 |
|
593 if ( supported ) { |
|
594 System.out.println("getUsageThreshold\t\t" |
|
595 + memoryPool.getUsageThreshold()); |
|
596 System.out.println("isUsageThresholdExceeded\t\t" |
|
597 + memoryPool.isUsageThresholdExceeded()); |
|
598 System.out.println("getUsageThresholdCount\t\t" |
|
599 + memoryPool.getUsageThresholdCount()); |
|
600 } |
|
601 |
|
602 supported = memoryPool.isCollectionUsageThresholdSupported() ; |
|
603 System.out.println("isCollectionUsageThresholdSupported\t\t" |
|
604 + supported); |
|
605 |
|
606 if ( supported ) { |
|
607 System.out.println("getCollectionUsageThreshold\t\t" |
|
608 + memoryPool.getCollectionUsageThreshold()); |
|
609 System.out.println("getCollectionUsageThresholdCount\t\t" |
|
610 + memoryPool.getCollectionUsageThresholdCount()); |
|
611 System.out.println("isCollectionUsageThresholdExceeded\t\t" |
|
612 + memoryPool.isCollectionUsageThresholdExceeded()); |
|
613 } |
|
614 |
|
615 memoryPool.resetPeakUsage(); |
|
616 } |
|
617 |
|
618 System.out.println("---- OK\n") ; |
|
619 } catch (Exception e) { |
|
620 Utils.printThrowable(e, true) ; |
|
621 errorCount++ ; |
|
622 System.out.println("---- ERROR\n") ; |
|
623 } |
|
624 |
|
625 return errorCount ; |
|
626 } |
|
627 |
|
628 |
|
629 private int checkNonEmpty(MBeanInfo mbi) { |
|
630 if ( mbi.toString().length() == 0 ) { |
|
631 System.out.println("(ERROR) MBeanInfo is empty !"); |
|
632 return 1; |
|
633 } else { |
|
634 return 0; |
|
635 } |
|
636 } |
|
637 |
|
638 } |