搭建模拟环境:

操作系统: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、在下图中上面添加参数

7cb78e1ae95dcb139deb76c842ef9114.png

参数添加后的样子

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"

配置后的截图:

f91732a44ad83288c31a0b724fe63802.png

参数说明:

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"

配置后的截图:

210e5dcc2efa35bb13653a38da86ab03.png

参数说明:

authenticate:为true开启账号验证

access.file:权限文件路径

password.file:密码文件路径

3.3、当没有配置密码验证的时候,不需要此步操作,当启用用户、密码验证后需要操作此步骤

3.3.1、找到jdk安装目录

如果不知道安装到目录那个地方可以通过命令查找:

# java -verbose

b00c21f318fd93f814f60ea3122f2423.png

3.3.2、切换到jdk目录中

148d2e406f28bc4f6312af53f0ccd912.png

进入#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文件

089542aead8e33145e56b423725f2d62.png

3.3.4、重命名密码文件:

# mv jmxremote.password.template jmxremote.password

3.3.5、编辑密码文件

# vim jmxremote.password

252aeae868df6b1d7266a64e89555c48.png

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.

492f2277773cd7c0aa5b6816d68251f6.png

4.1、做完上面操作,使用jdk自带的jvisualvm.exe连接,可以在windows下测试

81a8557a6750462b5b6ea3c966b6347f.png

c22dc1bedc42958c743fec02eb2120e4.png

d289e751345a2ac36100af50f493a9e1.png

129e61ee06b8072af1addbeab3cd07db.png

dd508784964fdc70007c62e54a0fe877.png

双击打开jmx连接

5cb05f22a6425679696f8458596da47d.png

d3a81b203dce2244c0705fd95092314b.png

4.2、重启tomcat,测试jmx是否还可以连接上

# ./shutdown.sh

4.2.1、再次连接jmx查看是否可以连接上

数据监控图都查看不了,连接不上

7ea50c98f1a9d2616c0bc5e98d0ff770.png

2bb1caf76daf5f27c98dfb7a9c3ac683.png

为什会出现这个问题?

网上给出的结论是:

tomcat的jmx远程健康是需要两个端口,一个是注册端口,一个是服务端口,之前配置指定的9999端口是注册端口,tomcat在启动的时候会随机指定一个服务端口,由于我们注册端口只有一个,所以在重启服务后,注册端口没有变化,服务端口已经变了,再次通过注册端口连接已经连接不上之前的服务端口了,没有办法指定服务端连接,服务端口是随机的。

有一种方法是设置jmx固定的注册端口和服务端口,通过jar包实现

5、登录tomcat官网(注意,我的tomcat版本是1.8.0的官网上只有1.8.5的也可以使用)

根据自己的tomcat版本找到JMX Remote jar

5553d7ff676b0e032e97b5aa3eccbed4.png

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

020d6e102e956348c825795763e3b5c0.png

7、编辑tomcat的conf目录下的server.xml文件

# vim server.xml

添加下面内容:

rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

1ba8187f64474b75fe89c2242f4405d8.png

8、编辑tomcat的bin目录下catalina.sh

# vim catalina.sh

删除参数:

-Dcom.sun.management.jmxremote.port=9999

8ba5a5c54a2aad4172458cfad9cc99ed.png

9、重启tomcat测试,jmx注册端口为10001,服务端口为10002

571d3dc4aabe11456963cf528ed0d5a6.png

8a4299e47b1a4ae983cd02c639d4d1b2.png

a02317d7b0479fd1fa86916e6c89494f.png

f323c46079d20e994accc0ff08e548a3.png

259d50f736343be331f1091ef1a3511b.png

10、重启tomcat再次连接测试

当我们双击之前创建的jmx远程连接的时候会发现也连接不上,这是为什么呢,这里我们要注意上面连接中的pid号,经过查询,我们发现这个pid号就是linux中tomcat的pid号,当我们重启tomcat后,会产生新的pid号,所以我们想要连接就要新建一个连接

4449e28259d0d3f93d9582f24c2859e9.png

725ec5355135e6fa3f4fcee0d6003265.png

11、我们再次新建jmx连接的时候会获取新的pid号

84780520dd548232cfaf00d30e62fc11.png

bb77a0bbd3d23de171cb24f9fe2f73fa.png

12、到这里我们就测试成功了,这样在我们使用zabbix使用jmx监控tomcat的时候就不用担心tomcat重启jmx端口连接不上了

总结

以上所述是小编给大家介绍的通过Tomcat开启JMX监控的方法图解,希望对大家有所帮助!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐