jvisualvm和jmx都是JDK自带的工具
jvisualvm的位置在$JAVA_HOME/bin目录下
Windows下可以双击exe启动,也可以命令行启动
远程主机配置jmx:
1、
找到配置文件$JAVA_HOME/jre/lib/management/jmxremote.password.template,复制一份并改名为jmxremote.password,然后打开jmxremote.passwrod,取消以下两行注释:
#monitorRole QED
#controlRole R&D
其中monitorRole就是监控的账号名,后面是密码,最好把密码改了,不然要密码也没有什么意义,比如改为QED123456。
2、
修改所要启动的java程序的启动参数(JVM_OPTS)。如果是linux下的tomcat,则打开tomcat的bin目录下的catalina.sh(windows下应该是catalina.bat,windows下怎么处理请自行谷歌百度),加入以下内容(非tomcat程序也类似):
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.236.20 \
-Dcom.sun.management.jmxremote.port=18999 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=true"
其中参数hostname=192.168.236.20是远程主机的ip,port=18999就是jmx监听的端口,等待jvisualvm连接。
其中最后一个参数authenticate表示是否需要密码认证,如果是生产环境,为了安全最好赋值为true,这样第1步设置的密码也有了真正的用处。
3、
很重要,你需要监控的程序是由哪个用户启动,则把jmxremote.password文件的权限改为这个用户的只读权限,否则启动程序会报错:Error: Password file read access must be restricted。其实这些在jmxremote.password里的注释都有说明。
比如,如果你是用root用户启动tomcat,则先执行
chown root jmxremote.password
再执行
chmod 400 jmxremote.password
4、
启动待监控的程序,比如tomcat
本地启动jvisualvm:
5、
启动jvisualvm,左边栏,右键“远程”>>“添加远程主机”
左侧栏,右键刚才添加的远程主机>>“添加jmx链接”
其中用户名和口令就是第一步中配置的用户名和密码。点击“确定”。
至此,应该就可以监控到远程主机上java程序的运行状况了。