介绍
jdk自带有个jvisualvm工具、该工具是用来监控java运行程序的cpu、内存、线程等的使用情况。并且使用图表的方式监控java程序、还具有远程监控能力。
配置
- 在你的tomcat的bin目录下 startup.sh,在最后一行的前面(这个是重点,如果加在最后一行是无法读取的)
export CATALINA_OPTS="$CATALINA_OPTS
# 主机的地址,指的是你的服务器的外网访问地址
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
# 端口号,指的是通过哪个端口监听
-Dcom.sun.management.jmxremote.port=xxx
-Dcom.sun.management.jmxremote.ssl=false
# 是否开启认证,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"
- 如果开启认证,编写认证的用户名密码文件
- jmxremote.access的配置
username1 readonly username2 readwrite
- jmxremote.password的配置
username1 password1 username2 password2
- 将2中配置的两个文件开启权限
chmod 600 jmx*
- 打开jvisualvm软件(在jdk的bin目录下)
- 添加远程连接,输入ip然后点确定
- 点击添加JMX连接
- 然后输入远程主机的用户名密码就可以了
问题及解决
配置都好了,能够ping通服务器,但是远程通过JMX访问不到,只有关闭防火墙才能访问到。
防火墙的配置规则,应该怎么配?==>
问题分析:
- 通过netstat查看端口号,显示1100为LISTEN;监听是正常的;
- iptables中已经将端口号1100置为开放的;
- 远程通过telnet 时,telnet是正常的;
- (但是)通过jconsole 进行连接时,连接不上;
- (如果)关闭firewall的话,第4步的方式是可以成功的;
解答:
除了JMX server指定的监听端口号外,JMXserver还会监听一到两个随机端口号,
可以通过命令:lsof -i|grep java |grep 来查看当前java进程需要监听的随机端口号,
///begin
# netstat -tupln |grep 1101
tcp 0 0 0.0.0.0:1101 0.0.0.0:* LISTEN 13997/java
# lsof -i|grep 13997
java 13997 root 9u IPv4 132890 0t0 TCP *:37040 (LISTEN)
java 13997 root 70u IPv4 132891 0t0 TCP *:pt2-discover (LISTEN)
java 13997 root 72u IPv4 132892 0t0 TCP *:40085 (LISTEN)
java 13997 root 76u IPv4 146976 0t0 TCP hotnamea:61618->10.88.146.205:49165 (ESTABLISHED)
java 13997 root 84u IPv4 132904 0t0 TCP *:61618 (LISTEN)
java 13997 root 95u IPv4 132936 0t0 TCP *:8163 (LISTEN)
///end//
并且把这些端口号也放到iptable中,置为开放状态。
小结:这也证明了尽管jmx server的主监听端口号【1100】已开放,但是远程连接时,还是访问不到,只有关闭firewall,才可以远程jmx连接上。
建议:因为随机短口号是Java进程启动后,OS随机分配给jmxserver的,如果可以关闭firewall就选择关闭,否则,需要每次在server就绪后,监测到随机端口号,并把它们配置到iptables中,置为开放状态。
注意:每个Jmxserver还需要两个随机端口号。
参考文献
https://www.iteye.com/blog/qian0021514578-2189041
https://my.oschina.net/kone/blog/157239