MangoCool

jvisualvm 监控 tomcat

2020-12-02 12:00:23   作者:MangoCool   来源:MangoCool

先上一张实际监控的效果图:


环境:

服务端:

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.password
2、启动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

分享:

上一篇如何使你的tomcat启动更快

下一篇启用和分析垃圾收集日志

关于我

崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。

座右铭

当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!

人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。

Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号

免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。