我们都知道JVM对于JAVA程序来说是很重要的,通过对JVM的实时监控并以此为依据进行合适的调节,对Java程序的健壮性起着非常大的作用。接下来,本章节介绍如何查看JVM的参数,以及如何通过zabbix来监控Tomcat的JVM运行情况~~
请提前在zabbix-agent上安装一个tomcat服务,安装过程这里省略。。。
一、普通对JVM的监控方式
1.1 通过java进程号查看JVM信息
使用下面两个命令之前,需要知道java程序运行的进程号!
获取tomcat的进程号:
ps -ef |grep tomcat
1.1.1 jmap
使用`jmap -heap 进程号`命令查看jvm使用情况:
使用jmap时遇到报错:
因为这里用到了sun.jvm下的debug包,而默认openJDK的安装中不包含。
解决方法:
下载并安装一个java-openjdk-debug插件!而且需要和openjdk小版本也一致!!!
下载地址:http://debuginfo.centos.org/7/x86_64/
查看系统自身的openjdk版本:
这里我因为找不到和小版本一致的安装包,因此首先就将其卸载了(蛇皮操作)!!
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情况!
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
找到如下程序,双击运行:
输入远程连接的地址和端口号:10.0.0.11:12345(根据自己的配置)
接下来就能进行状态的查看了:
1.3.2 jvisualvm
找到如下程序,双击运行:
添加一个JMX连接,并填写正确的属性:
添加完成后,可以在左边栏双击打开,即可对JVM进行监控
二、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监控,并点击更新
添加JMX监控的模板:
等待主机的JMX按钮变绿,说明已经添加上JMX监控了:
可以根据模板里面的监控项自定义监控图形:
做到如下图类似的效果: