Java

jvm性能优化之jvm监控系统

2019-03-16  本文已影响23人  Plutarch

jmxtrans

介绍

jmxtrans是一个jvm管理工具,它允许您连接到任意数量的Java虚拟机(JVM)并查询它们的属性,而无需编写单行Java代码。这些属性通过Java Management ExtensionsJMX)从JVM导出。大多数Java应用程序都通过此协议提供了统计信息,并且可以将其添加到任何代码库中而无需花费太多精力。如果将SpringFramework用于代码,就可以像在Java类文件中添加几个注释一样简单。 查询语言基于易于编写的JSON格式。这允许非程序员访问JMX而无需知道如何编写Java,实现了对代码的零侵入。查询的结果由名为OutputWritersJava类处理。开箱即用,jmxtrans支持多个输出编写器,可通过配置直接写入到对应的数据库。

1、 Engine Mode

使用jmxtrans有两种主要模式。第一种是使用分发中包含的JmxTransformer引擎。该引擎将读取.json文件的目录,然后创建“作业”以在类似cron的计划上执行。
每个作业都映射到您要查询jmx属性的服务器。因此,您可以通过在Server对象上设置cronExpression字段来为每个服务器设置复杂的查询计划(默认 为每分钟)。 对于给定的json文件,可以在其中定义无限数量的服务器。服务器是您要从中收集统计信息的JVM,并由主机名,端口,用户名和密码定义。 在每个服务器中,可以对其执行无限数量的JMX查询。针对服务器执行的每个查询都可以使用任意数量的OutputWriters输出其结果。
JmxTransformer引擎是完全多线程的。您指定要为应用程序的每个部分启动的最大线程数。默认情况下,最多同时查询10台服务器。对于服务器,每个查询也可以有多个线程。因此,您可以指定要10个线程来处理50个服务器。您的每台服务器可能已定义了10个查询。因此,您可以将numQueryThreads设置为2,以便同时对服务器执行两个查询。JmxTransformer有两个方面。输入是与JVM中运行的JMX服务器的连接。输出是OutputWriters。必要时,双方都使用连接对象池来维护与输入和输出的套接字连接。

2、API模式

jmxtrans的第二种模式是充当API来构建自己的应用程序,以便从JMX中提取数据并将其写出来。引擎是在这个API之上编写的。engine是我如何使用这个项目,所以你可以编写自己的engine完全支持。 api的核心在JmxUtils类中实现为大多数静态方法。也可以使用Java'ish语言(如Jython,Scala和Groovy)来编写jmxtrans脚本以执行您想要的任何操作。

架构

jmxtrans+influxdb+grafana

安装(其它安装方式详见官网)

docker run -p 8086:8086 -p 8083:8083 -e INFLUXDB_ADMIN_ENABLED=true influxdb:1.2.4

docker run -d -v /opt/jmxtrans/json-files:/var/lib/jmxtrans -p 9999:9999 --env PROXY_HOST=10.10.0.131 docker.xsy.io/base/jmxtrans:1.0

The arguments as environment variable are :

· SECONDS_BETWEEN_RUNS
· HEAP_SIZE
· PERM_SIZE
· MAX_PERM_SIZE
· CONTINUE_ON_ERROR
· JMXTRANS_OPTS
· JAVA_OPTS

To run jmxtrans:
· ./jmxtrans.sh start [optional path to one json file]

To stop jmxtrans:
· ./jmxtrans.sh stop

Options you may want to configure:
· JSON_DIR - Location of your .json files. Defaults to '.'
· LOG_DIR - Location of where the log files get written. Defaults to '.'
· SECONDS_BETWEEN_RUNS - How often jobs run. Defaults to 60.

配置

注意: 配置之前请确保监控的java 服务已经打开jmx

-Dcom.sun.management.jmxremote.port=1105
-Dcom.sun.management.jmxremote.host=10.10.0.130
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

· 配置template文件到上面容器挂载目录下:

更多配置参数可以通过jconsole 连接查看mean。

{
  "servers" : [ {
    "port" : "1105",    # jmx端口 
    "host" : "192.168.0.11",  # jmx IP
    "username" : "xxx", # jmx 用户名 
    "password" : "xxx", # jmx 密码 
    "queries" : [ {
      "outputWriters" : [ {
        "@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
        "url" : "[http://10.10.0.130:8086/](http://10.10.0.130:8086/)", 
        "username" : "root",
        "password" : "root",
        "database" : "jmxtrans",
        "tags"     : {"application" : "manager-service"}
      } ],
      "obj" : "java.lang:type=OperatingSystem",
      "attr" : [ "SystemLoadAverage", "AvailableProcessors", "TotalPhysicalMemorySize", 
       "FreePhysicalMemorySize", "TotalSwapSpaceSize", "FreeSwapSpaceSize", 
       "OpenFileDescriptorCount", "MaxFileDescriptorCount","SystemCpuLoad" ],
      "resultAlias":"SystemUsage"
    },
...
]
  } ]
}

· 查看influxdb数据


image.png

· 配置grafana dashboard


image.png

参考资料

jmxtrans https://github.com/jmxtrans/jmxtrans

influxdb https://jasper-zhang1.gitbooks.io/influxdb

上一篇下一篇

猜你喜欢

热点阅读