Groovy JMX

2023-12-07 16:23:58 作者:admin

本文整理自网络,侵删。

JMX是defacto标准,用于监控与Java虚拟环境有任何关系的所有应用程序。鉴于Groovy直接位于Java之上,Groovy可以利用已经为Java实现的大量工作。

监视JVM

可以使用java.lang.management中提供的标准类来执行JVM的监视。以下代码示例说明如何完成此操作。

import java.lang.management.*def os = ManagementFactory.operatingSystemMXBean println """OPERATING SYSTEM: OS architecture = $os.arch OS name = $os.name OS version = $os.version OS processors = $os.availableProcessors """  def rt = ManagementFactory.runtimeMXBean println """RUNTIME:    Runtime name = $rt.name    Runtime spec name = $rt.specName    Runtime vendor = $rt.specVendor    Runtime spec version = $rt.specVersion    Runtime management spec version = $rt.managementSpecVersion    """ def mem = ManagementFactory.memoryMXBean def heapUsage = mem.heapMemoryUsage def nonHeapUsage = mem.nonHeapMemoryUsage println """MEMORY:    HEAP STORAGE:       Memory committed = $heapUsage.committed       Memory init = $heapUsage.init       Memory max = $heapUsage.max       Memory used = $heapUsage.used NON-HEAP STORAGE:       Non-heap memory committed = $nonHeapUsage.committed       Non-heap memory init = $nonHeapUsage.init       Non-heap memory max = $nonHeapUsage.max       Non-heap memory used = $nonHeapUsage.used    """  println "GARBAGE COLLECTION:" ManagementFactory.garbageCollectorMXBeans.each { gc ->   println "name = $gc.name"   println "collection count = $gc.collectionCount"   println "collection time = $gc.collectionTime"   String[] mpoolNames =   gc.memoryPoolNames   mpoolNames.each {       mpoolName -> println "mpool 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发现正在运行的Tomcat中的可用MBean,确定哪些是Web模块并提取每个Web模块的处理时间。

import groovy.swing.SwingBuilder  import javax.management.ObjectName import javax.management.remote.JMXConnectorFactory as JmxFactory import javax.management.remote.JMXServiceURL as JmxUrl import javax.swing.WindowConstants as WC  import org.jfree.chart.ChartFactory import org.jfree.data.category.DefaultCategoryDataset as Dataset import org.jfree.chart.plot.PlotOrientation as Orientation  def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi' def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection def serverInfo = new GroovyMBean(server, 'Catalina:type = Server').serverInfo println "Connected to: $serverInfo"  def query = new ObjectName('Catalina:*') String[] allNames = server.queryNames(query, null) def modules = allNames.findAll { name ->    name.contains('j2eeType=WebModule') }.collect{ new GroovyMBean(server, it) }  println "Found ${modules.size()} web modules. Processing ..." def dataset = new Dataset()  modules.each { m ->   println m.name()   dataset.addValue m.processingTime, 0, m.path }

标签:Groovy

相关阅读 >>

Groovy 日期和时间

Groovy 模板引擎

Groovy shebang行

Groovy 循环

Groovy 数据类型

Groovy jmx

Groovy 构建器

Groovy 文件io

Groovy 范围

Groovy 环境

更多相关阅读请进入《Groovy》频道 >>


深入理解Java虚拟机 JVM高级特性与实践 周志明 第3版
书籍

深入理解Java虚拟机 JVM高级特性与实践 周志明 第3版

机械工业出版社

这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典。



在线咨询 拨打电话