先上一张实际监控的效果图:
环境:
服务端:
centos6.5 jdk8 tomcat7
客户端:
windows jdk8
客户端配置:
1、安装插件Visual GC 和 VisualVM-MBeans
jdk安装目录/bin下,双击启动jvisualvm.exe,工具->可用插件,勾选中Visual GC 和 VisualVM-MBeans,点击安装:
下图为安装成功后,监控本地java程序:
服务端配置JMX:
1、设置setenv.sh
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=%my.jmx.port% -Dcom.sun.management.jmxremote.rmi.port=%my.rmi.port% -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=%my.jmx.hostname% -Dcom.sun.management.jmxremote.password.file=%my.path%/jmxremote.password -Dcom.sun.management.jmxremote.access.file=%my.path%/jmxremote.access"
注意:
a. JAVA_OPTS这里为了方便查看,人为换行了,在实际设置中,最好去除换行,参数之间保留一个空格即可(这里我吃过一次亏,启动不了tomcat);如果你喜欢也可以将JAVA_OPTS写入catalina.sh中,如何设置,百度一下,轻松搞定;
b. 为了方便my.jmx.port最好和my.rmi.port一致,设置了my.rmi.port,服务启动后就不会再选2个随机的端口监听,这样一来省去了不少麻烦(尤其使用的是阿里云服务器),记得关闭防火墙或者开发这个端口;
c. my.jmx.hostname 对你你服务器的公网IP或者能够访问的内网IP,可以使用hostname -i 查看,如需修改则可以修改/etc/hosts;
这里参数-Dcom.sun.management.jmxremote.authenticate设置true,因此需要设置jmxremote.access和jmxremote.password,分别对应着监控时的安全凭证,账户和口令。
这两个文件目录可以任意指定,这里放在了tomcat下了。
jmxremote.access
monitorRole readonly
monitorRole是监控账户,与linux的ssh管理员用户不同,readonly代表监控账户的权限
注意:如果只是设置readonly,线程无法监控到,修改权限成readwrite即可。
jmxremote.password
monitorRole 123456表示监控的账户和口令
注意:新建完成这两个文件,需要赋予文件权限,执行命令:
chmod 600 jmxremote.access chmod 600 jmxremote.password2、启动tomcat
看设置的端口是否监听,查看tomcat进程:
ps -ef|grep tomcat查看监听端口:
netstat -anp|grep %pid%
以上是tomcat启动后,所监听的端口列表,jmx.port和rmi.port我都设置的8098
至此你可以远程监听tomcat的jvm情况了。
远程->右键->添加远程主机
右键远程主机->添加JMX连接
不过此时你监控的内容还是:CPU,内存,类,线程,MBeans,最关键的Visual GC还看不了,那就需要启动jstatd服务。
服务端启动jstatd:
linux服务器下jdk/bin目录下新建jstatd.all.policy文件,内容如下:
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };这个是开启jstatd访问权限,当然还有另外的设置方法,将permission java.security.AllPermission;配置写入jdk/jre/lib/security/java.policy文件中,记住是}括号之前。
启动命令:
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=%hostname% -J-Djava.rmi.server.logCalls=true -J-Djava.net.preferIPv4Stack=true -p 8099
同样,这里为了方便查看,人为换行了,实际命令需要去除换行,参数之间保留一个空格即可。
后台运行,可以执行:
nohup jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=%hostname% -J-Djava.rmi.server.logCalls=true -J-Djava.net.preferIPv4Stack=true -p 8099 2>&1 &
注意:hostname同上述中设置的hostname一致,这里的监听端口我改成了8099,可以不设置,不设置则默认1099。启动后,jstatd服务会随其选一个端口进行监听,别忘了开放次端口(尤其是使用阿里云服务器的,一定要去安全组中放行这个端口的访问)
不过jdk15增加了参数,可以指定RMI连接器端口,如:-r 8097
是否启动成功,使用jps和netstat命令:
启动后,到jvisualvm.exe远程主机中添加jstatd连接,如果端口不是默认1099,记得修改成对应的端口。
如果是使用默认端口,jvisualvm.exe会指定刷出tomcat的Visual GC监控,设置是默认每3秒刷一次。
至此设置就全部完成了!
参考来源:https://tomcat.apache.org/tomcat-8.5-doc/monitoring.html
标签: jvisualvm 监控 tomcat Visual VM linux JVM
分享:
崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。
联系QQ:58742094
联系电话:
工作邮箱:
当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!
人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。
Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号
免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。