我们都知道JVM对于JAVA程序来说是很重要的,通过对JVM的实时监控并以此为依据进行合适的调节,对Java程序的健壮性起着非常大的作用。接下来,本章节介绍如何查看JVM的参数,以及如何通过zabbix来监控Tomcat的JVM运行情况~~

请提前在zabbix-agent上安装一个tomcat服务,安装过程这里省略。。。

一、普通对JVM的监控方式

1.1 通过java进程号查看JVM信息

使用下面两个命令之前,需要知道java程序运行的进程号!

获取tomcat的进程号:

ps -ef |grep tomcat

如何监控jvm的内存信息 zabbix监控jvm内存_如何监控jvm的内存信息

1.1.1 jmap

使用`jmap -heap 进程号`命令查看jvm使用情况:

 

如何监控jvm的内存信息 zabbix监控jvm内存_java_02

使用jmap时遇到报错:

如何监控jvm的内存信息 zabbix监控jvm内存_JVM_03

因为这里用到了sun.jvm下的debug包,而默认openJDK的安装中不包含。

解决方法:

下载并安装一个java-openjdk-debug插件!而且需要和openjdk小版本也一致!!!

下载地址:http://debuginfo.centos.org/7/x86_64/

查看系统自身的openjdk版本:

如何监控jvm的内存信息 zabbix监控jvm内存_java_04

这里我因为找不到和小版本一致的安装包,因此首先就将其卸载了(蛇皮操作)!!

yum -y erase java-1.8.0-openjdk-devel-1.8.0.201.b09-2.el7_6.x86_64
yum -y erase java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64

 然后选择能够找到findbug的版本安装:

yum -y install java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
yum -y install java-1.8.0-openjdk-devel-1.8.0.191.b12-1.el7_6.x86_64

下载并安装对应版本的findbugs插件:

wget http://debuginfo.centos.org/7/x86_64/java-1.8.0-openjdk-debuginfo-1.8.0.191.b12-1.el7_6.x86_64.rpm
rpm -ivh java-1.8.0-openjdk-debuginfo-1.8.0.191.b12-1.el7_6.x86_64.rpm

 安装完成后成功解决报错问题!!!

 1.1.2 jstat

使用`jstat -gcutil 进程号 2000`来实时查看jvm的GC情况!

如何监控jvm的内存信息 zabbix监控jvm内存_tomcat_05

1.2 配置JVM连接参数

默认情况下,外部是无法连接jmv的,需要做一些配置才能进行连接!!

zabbix的JMX连接也许要配置这个参数!!

具体配置内容为:在${TOMCAT_HOME}/bin/catalina.sh文件里面添加如下内容:

CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.12"        #<==本机IP

#这里指定了JVM连接的IP地址和端口号!

配置完成后重启Tomcat服务:

/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh

1.3 通过JDK工具监控

除了通过简单的命令查看外,我们还可以通过windows环境中JDK自带的两个监控工具,这个两个工具默认存在在${JDK_HOME}/bin下,我电脑下对应的路径为:

C:\Java\jdk1.8.0_131\bin

1.3.1 jconsole

找到如下程序,双击运行:

如何监控jvm的内存信息 zabbix监控jvm内存_tomcat_06

输入远程连接的地址和端口号:10.0.0.11:12345(根据自己的配置)

如何监控jvm的内存信息 zabbix监控jvm内存_tomcat_07

接下来就能进行状态的查看了:

如何监控jvm的内存信息 zabbix监控jvm内存_java_08

 1.3.2 jvisualvm

找到如下程序,双击运行:

如何监控jvm的内存信息 zabbix监控jvm内存_tomcat_09

添加一个JMX连接,并填写正确的属性:

如何监控jvm的内存信息 zabbix监控jvm内存_如何监控jvm的内存信息_10

如何监控jvm的内存信息 zabbix监控jvm内存_java_11

添加完成后,可以在左边栏双击打开,即可对JVM进行监控

如何监控jvm的内存信息 zabbix监控jvm内存_如何监控jvm的内存信息_12

二、zabbix添加JMX监控

 在添加监控操作之前,首先要确保Tomcat开启了JVM的连接参数:

vim /opt/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.12"

2.1 安装zabbix-java-gateway服务

可以在任意的节点安装,zabbix-server需要配置gateway的连接地址。这里安装在zabbix-agent主机上!

zabbix server是无法直接抓取JVM参数的,因此官方提供了一个独立运行的zabbix-java-gateway服务,以此来抓取JVM的数据!

安装(确认配置好了zabbix的yum源):

yum -y install zabbix-java-gateway

启动zabbix-gateway,zabbix-java-gateway不需要做任何配置:

systemctl start zabbix-java-gateway.service
systemctl enable zabbix-java-gateway.service

2.2 server端配置连接zabbix-java-gateway

在zabbix-server主机上修改配置(注意:如果使用了proxy,那么在proxy配置里也要做如下修改):

配置文件: /etc/zabbix/zabbix_server.conf

JavaGateway=10.0.0.12
JavaGatewayPort=10052
StartJavaPollers=5

重启zabbix-server服务:

systemctl restart zabbix-server.service

2.3 在网页上配置JMX主机

在【配置】、【主机】、【zabbix-agent】的主页栏里添加JMX监控,并点击更新

如何监控jvm的内存信息 zabbix监控jvm内存_tomcat_13

添加JMX监控的模板:

如何监控jvm的内存信息 zabbix监控jvm内存_JVM_14

等待主机的JMX按钮变绿,说明已经添加上JMX监控了:

如何监控jvm的内存信息 zabbix监控jvm内存_JVM_15

可以根据模板里面的监控项自定义监控图形:

如何监控jvm的内存信息 zabbix监控jvm内存_如何监控jvm的内存信息_16

做到如下图类似的效果:

如何监控jvm的内存信息 zabbix监控jvm内存_tomcat_17