精通 Grails: 在企业中使用 Grails
Groovy 中的 JMX
我最后要向您展示的是如何以编程方式调试 JMX MBean。JConsole GUI 非常漂亮,能够从 Groovy 脚本进行更改更是增加了它的魅力。
开始之前,创建一个名为 testJmx.groovy 的文件,将清单 13 中的代码添加到该文件中:
清单 13. 在 Groovy 中调用一个远程 JMX 代理
import javax.management.MBeanServerConnection
import javax.management.remote.JMXConnectorFactory
import javax.management.remote.JMXServiceURL
def agentUrl = "service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi"
def connector = JMXConnectorFactory.connect(new JMXServiceURL(agentUrl))
def server = connector.mBeanServerConnection
println "Number of registered MBeans: ${server.mBeanCount}"
println "\nRegistered Domains:"
server.domains.each{println it}
println "\nRegistered MBeans:"
server.queryNames(null, null).each{println it}
import javax.management.remote.JMXConnectorFactory
import javax.management.remote.JMXServiceURL
def agentUrl = "service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi"
def connector = JMXConnectorFactory.connect(new JMXServiceURL(agentUrl))
def server = connector.mBeanServerConnection
println "Number of registered MBeans: ${server.mBeanCount}"
println "\nRegistered Domains:"
server.domains.each{println it}
println "\nRegistered MBeans:"
server.queryNames(null, null).each{println it}
如果 Grails 正在运行,应该可以看到如清单 14 所示的输出:
清单 14. testJmx.groovy 脚本的输出
$ groovy testJmx.groovy
Number of registered MBeans: 20
Registered Domains:
java.util.logging
JMImplementation
java.lang
log4j
Registered MBeans:
java.lang:type=MemoryManager,name=CodeCacheManager
java.lang:type=Compilation
java.lang:type=GarbageCollector,name=Copy
java.lang:type=MemoryPool,name=Eden Space
log4j:appender=stdout
java.lang:type=Runtime
log4j:hierarchy=default
log4j:logger=root
log4j:appender=stdout,layout=org.apache.log4j.PatternLayout
java.lang:type=ClassLoading
java.lang:type=MemoryPool,name=Survivor Space
java.lang:type=Threading
java.lang:type=GarbageCollector,name=MarkSweepCompact
java.util.logging:type=Logging
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=MemoryPool,name=Code Cache
java.lang:type=MemoryPool,name=Tenured Gen
java.lang:type=MemoryPool,name=Perm Gen
JMImplementation:type=MBeanServerDelegate
Number of registered MBeans: 20
Registered Domains:
java.util.logging
JMImplementation
java.lang
log4j
Registered MBeans:
java.lang:type=MemoryManager,name=CodeCacheManager
java.lang:type=Compilation
java.lang:type=GarbageCollector,name=Copy
java.lang:type=MemoryPool,name=Eden Space
log4j:appender=stdout
java.lang:type=Runtime
log4j:hierarchy=default
log4j:logger=root
log4j:appender=stdout,layout=org.apache.log4j.PatternLayout
java.lang:type=ClassLoading
java.lang:type=MemoryPool,name=Survivor Space
java.lang:type=Threading
java.lang:type=GarbageCollector,name=MarkSweepCompact
java.util.logging:type=Logging
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=MemoryPool,name=Code Cache
java.lang:type=MemoryPool,name=Tenured Gen
java.lang:type=MemoryPool,name=Perm Gen
JMImplementation:type=MBeanServerDelegate
警告
testJmx.groovy 脚本可能会抛出一条类似清单 15 所示的 groovy.lang.MissingMethodException:
清单 15. 可能抛出的 JMX 异常
Caught: groovy.lang.MissingMethodException: No signature of method:
javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.queryNames()
is applicable for argument types: (java.lang.String, null)
javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.queryNames()
is applicable for argument types: (java.lang.String, null)
如果发生这种情况,请从 $GROOVY_HOME/lib 中删除 mx4j-3.0.2.jar。它包含在 Groovy 发布版中,以通过 JMX 支持 1.4 JDK,但它与 Java 平台的更高版本冲突。
0
相关文章