jmxtrans示例和参考文档

杀马特。学长 韩版系。学妹 提交于 2020-01-07 03:34:39

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

目录

  • 快速运行DEMO
  • 开启JMX监控功能
  • 编译jmxtrans
  • 创建jmxtrans的JSON配置文件
  • 使用jconsole

1. 快速运行DEMO

1.1 下载DEMO

DEMO的github地址:https://github.com/JiamingMai/jmxtrans-demo

下载DEMO:

git clone https://github.com/JiamingMai/jmxtrans-demo.git

用maven编译:

mvn clean install -DskipTests

1.2 运行DEMO程序

进入target目录:

cd target

运行可执行jar文件

java -jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.rmi.port=1090 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 jmxtrans-demo-1.0-SNAPSHOT.jar

1.3 运行jmxtrans脚本进行监控

进入classes目录:

cd target/classes

运行jmxtrans脚本:

./jmxtrans.sh ./demo.json

1.4 观察结果

输出结果如下:

2020-01-02 15:09:50 [main] INFO  c.googlecode.jmxtrans.JmxTransformer - Starting Jmxtrans on : ./demo.json
Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[committed], value=128974848, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[init], value=134217728, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[max], value=1908932608, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=HeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[used], value=8862320, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[committed], value=13041664, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[init], value=2555904, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[max], value=-1, epoch=1577949020783, keyAlias=jvm.memory)
Result(attributeName=NonHeapMemoryUsage, className=sun.management.MemoryImpl, objDomain=java.lang, typeName=type=Memory, valuePath=[used], value=12021712, epoch=1577949020783, keyAlias=jvm.memory)

2. 开启JMX监控功能

Java程序运行时加入以下参数可以打开JMX:

-Dcom.sun.management.jmxremote.port=1090 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=127.0.0.1

3. 编译jmxtrans

jmxtrans的github地址:https://github.com/jmxtrans/jmxtrans

maven编译jmxtrans的时候要加上参数忽略Cobertura Checks:

mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dcobertura.skip=true -B -V

4. 创建jmxtrans的JSON配置文件

jmxtrans.sh需要一个JSON配置文件来指定待监控JVM的host、JMX端口、监控项以及所使用的OutputWriter等信息:

{
  "servers":[
    {
      "port":"1090",
      "host":"127.0.0.1",
      "runPeriodSeconds":30,
      "numQueryThreads":2,
      "queries":[
        {
          "obj":"java.lang:type=Memory",
          "attr":[
            "HeapMemoryUsage",
            "NonHeapMemoryUsage"
          ],
          "resultAlias": "jvm.memory",
          "outputWriters":[
            {
              "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
              "settings" : {
              }
            }
          ]
        }
      ]
    }
  ]
}

5. 使用jconsole

jconsole在jdk目录${JAVA_HOME}的bin目录下面:

ls ${JAVA_HOME}/bin/jconsole

如果有开启了JMX的JVM进程,运行jconsole可以连上去监控到它的信息:

jconsole
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!