JMX — это стандарт defacto, который используется для мониторинга всех приложений, имеющих отношение к виртуальной среде Java. Учитывая, что Groovy находится прямо над Java, Groovy может использовать огромный объем работы, уже проделанной для JMX с Java.
Мониторинг JVM
Можно использовать стандартные классы, доступные в java.lang.management, для мониторинга JVM. В следующем примере кода показано, как это можно сделать.
import java.lang.management.* def os = ManagementFactory.operatingSystemMXBean println """OPERATING SYSTEM: \tOS architecture = $os.arch \tOS name = $os.name \tOS version = $os.version \tOS processors = $os.availableProcessors """ def rt = ManagementFactory.runtimeMXBean println """RUNTIME: \tRuntime name = $rt.name \tRuntime spec name = $rt.specName \tRuntime vendor = $rt.specVendor \tRuntime spec version = $rt.specVersion \tRuntime management spec version = $rt.managementSpecVersion """ def mem = ManagementFactory.memoryMXBean def heapUsage = mem.heapMemoryUsage def nonHeapUsage = mem.nonHeapMemoryUsage println """MEMORY: HEAP STORAGE: \tMemory committed = $heapUsage.committed \tMemory init = $heapUsage.init \tMemory max = $heapUsage.max \tMemory used = $heapUsage.used NON-HEAP STORAGE: \tNon-heap memory committed = $nonHeapUsage.committed \tNon-heap memory init = $nonHeapUsage.init \tNon-heap memory max = $nonHeapUsage.max \tNon-heap memory used = $nonHeapUsage.used """ println "GARBAGE COLLECTION:" ManagementFactory.garbageCollectorMXBeans.each { gc -> println "\tname = $gc.name" println "\t\tcollection count = $gc.collectionCount" println "\t\tcollection time = $gc.collectionTime" String[] mpoolNames = gc.memoryPoolNames mpoolNames.each { mpoolName -> println "\t\tmpool name = $mpoolName" } }
Когда код выполняется, выходные данные будут различаться в зависимости от системы, в которой выполняется код. Пример вывода приведен ниже.
OPERATING SYSTEM: OS architecture = x86 OS name = Windows 7 OS version = 6.1 OS processors = 4 RUNTIME: Runtime name = 5144@Babuli-PC Runtime spec name = Java Virtual Machine Specification Runtime vendor = Oracle Corporation Runtime spec version = 1.7 Runtime management spec version = 1.2 MEMORY: HEAP STORAGE: Memory committed = 16252928 Memory init = 16777216 Memory max = 259522560 Memory used = 7355840 NON-HEAP STORAGE: Non-heap memory committed = 37715968 Non-heap memory init = 35815424 Non-heap memory max = 123731968 Non-heap memory used = 18532232 GARBAGE COLLECTION: name = Copy collection count = 15 collection time = 47 mpool name = Eden Space mpool name = Survivor Space name = MarkSweepCompact collection count = 0 collection time = 0 mpool name = Eden Space mpool name = Survivor Space mpool name = Tenured Gen mpool name = Perm Gen mpool name = Perm Gen [shared-ro] mpool name = Perm Gen [shared-rw]
Мониторинг Tomcat
Для мониторинга tomcat при запуске tomcat должен быть установлен следующий параметр:
set JAVA_OPTS = -Dcom.sun.management.jmxremote Dcom.sun.management.jmxremote.port = 9004\ -Dcom.sun.management.jmxremote.authenticate=false Dcom.sun.management.jmxremote.ssl = false
В следующем коде JMX используется для обнаружения доступных MBean-компонентов в запущенном Tomcat, определения веб-модулей и извлечения времени обработки для каждого веб-модуля.