课程表

Groovy课程

工具箱
速查手册

Groovy JMX

当前位置:免费教程 » Java相关 » Groovy

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

监视JVM

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

  1. import java.lang.management.*
  2.  
  3. def os = ManagementFactory.operatingSystemMXBean
  4. println """OPERATING SYSTEM:
  5. OS architecture = $os.arch
  6. OS name = $os.name
  7. OS version = $os.version
  8. OS processors = $os.availableProcessors
  9. """
  10. def rt = ManagementFactory.runtimeMXBean
  11. println """RUNTIME:
  12. Runtime name = $rt.name
  13. Runtime spec name = $rt.specName
  14. Runtime vendor = $rt.specVendor
  15. Runtime spec version = $rt.specVersion
  16. Runtime management spec version = $rt.managementSpecVersion
  17. """
  18.  
  19. def mem = ManagementFactory.memoryMXBean
  20. def heapUsage = mem.heapMemoryUsage
  21. def nonHeapUsage = mem.nonHeapMemoryUsage
  22.  
  23. println """MEMORY:
  24. HEAP STORAGE:
  25. Memory committed = $heapUsage.committed
  26. Memory init = $heapUsage.init
  27. Memory max = $heapUsage.max
  28. Memory used = $heapUsage.used NON-HEAP STORAGE:
  29. Non-heap memory committed = $nonHeapUsage.committed
  30. Non-heap memory init = $nonHeapUsage.init
  31. Non-heap memory max = $nonHeapUsage.max
  32. Non-heap memory used = $nonHeapUsage.used
  33. """
  34. println "GARBAGE COLLECTION:"
  35. ManagementFactory.garbageCollectorMXBeans.each { gc ->
  36. println " name = $gc.name"
  37. println " collection count = $gc.collectionCount"
  38. println " collection time = $gc.collectionTime"
  39. String[] mpoolNames = gc.memoryPoolNames
  40. mpoolNames.each {
  41. mpoolName -> println " mpool name = $mpoolName"
  42. }
  43. }

当代码执行时,输出将根据运行代码的系统而变化。下面给出了输出的样本。

  1. OPERATING SYSTEM:
  2. OS architecture = x86
  3. OS name = Windows 7
  4. OS version = 6.1
  5. OS processors = 4
  6. RUNTIME:
  7. Runtime name = 5144@Babuli-PC
  8. Runtime spec name = Java Virtual Machine Specification
  9. Runtime vendor = Oracle Corporation
  10. Runtime spec version = 1.7
  11. Runtime management spec version = 1.2
  12. MEMORY:
  13. HEAP STORAGE:
  14. Memory committed = 16252928
  15. Memory init = 16777216
  16. Memory max = 259522560
  17. Memory used = 7355840
  18. NON-HEAP STORAGE:
  19. Non-heap memory committed = 37715968
  20. Non-heap memory init = 35815424
  21. Non-heap memory max = 123731968
  22. Non-heap memory used = 18532232
  23. GARBAGE COLLECTION:
  24. name = Copy
  25. collection count = 15
  26. collection time = 47
  27. mpool name = Eden Space
  28. mpool name = Survivor Space
  29. name = MarkSweepCompact
  30. collection count = 0
  31. collection time = 0
  32. mpool name = Eden Space
  33. mpool name = Survivor Space
  34. mpool name = Tenured Gen
  35. mpool name = Perm Gen
  36. mpool name = Perm Gen [shared-ro]
  37. mpool name = Perm Gen [shared-rw]

监控Tomcat

为了监视tomcat,在启动tomcat时应设置以下参数 -

  1. set JAVA_OPTS = -Dcom.sun.management.jmxremote
  2. Dcom.sun.management.jmxremote.port = 9004
  3. -Dcom.sun.management.jmxremote.authenticate=false
  4. Dcom.sun.management.jmxremote.ssl = false

以下代码使用JMX发现正在运行的Tomcat中的可用MBean,确定哪些是Web模块并提取每个Web模块的处理时间。

  1. import groovy.swing.SwingBuilder
  2. import javax.management.ObjectName
  3. import javax.management.remote.JMXConnectorFactory as JmxFactory
  4. import javax.management.remote.JMXServiceURL as JmxUrl
  5. import javax.swing.WindowConstants as WC
  6. import org.jfree.chart.ChartFactory
  7. import org.jfree.data.category.DefaultCategoryDataset as Dataset
  8. import org.jfree.chart.plot.PlotOrientation as Orientation
  9. def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi'
  10. def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection
  11. def serverInfo = new GroovyMBean(server, 'Catalina:type = Server').serverInfo
  12. println "Connected to: $serverInfo"
  13. def query = new ObjectName('Catalina:*')
  14. String[] allNames = server.queryNames(query, null)
  15.  
  16. def modules = allNames.findAll { name ->
  17. name.contains('j2eeType=WebModule')
  18. }.collect{ new GroovyMBean(server, it) }
  19. println "Found ${modules.size()} web modules. Processing ..."
  20. def dataset = new Dataset()
  21. modules.each { m ->
  22. println m.name()
  23. dataset.addValue m.processingTime, 0, m.path
  24. }
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号