共计 3660 个字符,预计需要花费 10 分钟才能阅读完成。
搭建模拟环境:
操作系统:CentOS7
内存:1G
jdk:1.8.0_131
tomcat:8.0.48
环境准备我们这里就不直接演示了,直接配置 tomcat 的 jmx
1、进入到 tomcat 的 bin 目录下
# cd /opt/tomcat/apache-tomcat-8.0.48/bin/
2、编辑配置文件
# vim catalina.sh
3、在下图中上面添加参数
参数添加后的样子
3.1、此配置连接 jmx 不需要账号密码:
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-DJava.rmi.server.hostname=192.168.100.117
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
配置后的截图:
参数说明:
hostname:是监控 tomcat 所在服务器的 ip 地址
jmxremote.port:端口号,是要开启的监控端口号
jmxremote.ssl:是否要开启 ssl 连接
authenticate:false 表示监控不需要用户和密码
3.2、需要配置用户名、密码:
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.100.117
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"
配置后的截图:
参数说明:
authenticate:为 true 开启账号验证
access.file:权限文件路径
password.file:密码文件路径
3.3、当没有配置密码验证的时候,不需要此步操作,当启用用户、密码验证后需要操作此步骤
3.3.1、找到 jdk 安装目录
如果不知道安装到目录那个地方可以通过命令查找:
# java -verbose
3.3.2、切换到 jdk 目录中
进入# cd jre/lib/management/
在文件目录下会有 jmxremote.access jmxremote.password.template 文件,拷贝到 tomcat 的 conf 目录下
# cp jmxremote.* /opt/tomcat/apache-tomcat-8.0.48/conf/
3.3.3、修改 jmxremote.access 文件
3.3.4、重命名密码文件:
# mv jmxremote.password.template jmxremote.password
3.3.5、编辑密码文件
# vim jmxremote.password
3.3.6、编辑完文件后, 要修改 access 文件和 password 文件权限,不然 tomcat 启动不起来
# chmod 600 jmxremote.*
4、启动 tomcat
[root@ha bin]# ./startup.sh
Using CATALINA_BASE: /opt/tomcat/apache-tomcat-8.0.48
Using CATALINA_HOME: /opt/tomcat/apache-tomcat-8.0.48
Using CATALINA_TMPDIR: /opt/tomcat/apache-tomcat-8.0.48/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/apache-tomcat-8.0.48/bin/bootstrap.jar:/opt/tomcat/apache-tomcat-8.0.48/bin/tomcat-juli.jar
Tomcat started.
4.1、做完上面操作,使用 jdk 自带的 jvisualvm.exe 连接,可以在 windows 下测试
双击打开 jmx 连接
4.2、重启 tomcat,测试 jmx 是否还可以连接上
# ./shutdown.sh
4.2.1、再次连接 jmx 查看是否可以连接上
数据监控图都查看不了,连接不上
为什会出现这个问题?
网上给出的结论是:
tomcat 的 jmx 远程健康是需要两个端口,一个是注册端口,一个是服务端口,之前配置指定的 9999 端口是注册端口,tomcat 在启动的时候会随机指定一个服务端口,由于我们注册端口只有一个,所以在重启服务后,注册端口没有变化,服务端口已经变了,再次通过注册端口连接已经连接不上之前的服务端口了,没有办法指定服务端连接,服务端口是随机的。
有一种方法是设置 jmx 固定的注册端口和服务端口,通过 jar 包实现
5、登录 tomcat 官网(注意,我的 tomcat 版本是 1.8.0 的官网上只有 1.8.5 的也可以使用)
网址:https://tomcat.apache.org/
根据自己的 tomcat 版本找到 JMX Remote jar
6、把下载下来的上传到 tomcta 的 lib 目录下
获取 jar 包的连接也可以直接 wget 到 lib 目录下
# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/extras/catalina-jmx-remote.jar
7、编辑 tomcat 的 conf 目录下的 server.xml 文件
# vim server.xml
添加下面内容:
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
8、编辑 tomcat 的 bin 目录下 catalina.sh
# vim catalina.sh
删除参数:
-Dcom.sun.management.jmxremote.port=9999
9、重启 tomcat 测试,jmx 注册端口为 10001,服务端口为 10002
10、重启 tomcat 再次连接测试
当我们双击之前创建的 jmx 远程连接的时候会发现也连接不上,这是为什么呢,这里我们要注意上面连接中的 pid 号,经过查询,我们发现这个 pid 号就是 linux 中 tomcat 的 pid 号,当我们重启 tomcat 后,会产生新的 pid 号,所以我们想要连接就要新建一个连接
11、我们再次新建 jmx 连接的时候会获取新的 pid 号
12、到这里我们就测试成功了,这样在我们使用 zabbix 使用 jmx 监控 tomcat 的时候就不用担心 tomcat 重启 jmx 端口连接不上了