VisualVM 监控注册成 Windows 服务的 Tomcat 之 jstatd 方式二
VisualVM Windows 诊断工具 About 1,618 words现象
前文已经通过JMX能监控到JVM的堆栈等信息了,但是对于插件Visual GC,VisualVM 2.0.6还是无法监控安装成Windows Services的Tomcat。
排查
发现Tomcat的Windows Services在VisualVM的列表中,但是双击打开就是显示:不受JVM支持。
后发现Tomcat的Windows Services的Log On As指定了当前用户,所以导致VisualVM无法监控。
但改成了Local System后发现,Visual VM无法发现这个Tomcat进程了。
前提设置
打开Windows Services的Tomcat的属性,选择Log On标签页,选择Local System account,重启一下服务。
关键设置
下载NSSM:https://nssm.cc/download,将jstatd安装成服务。
NSSM 使用
下载后执行以下命令(安装一个名为jstatd的Windows Services),会弹出一个窗口,Path中选择jstatd.exe文件所在的文件(JDK的bin目录下)。
./nssm install jstatd
在Arguments一栏中,添加jstatd.exe的启动参数。端口号及安全策略文件。
-p 12345 -J-Djava.security.policy=C:\jstatd.all.policy
点击Install Services后会提示安装成功,可以在Windows Services中看到名为jstatd的服务,启动之,即可正常在VisualVM的Visual GC插件中看到GC的详细情况。
安全策略文件
Java8及以前
grant codebase "file:${java.home}/lib/tools.jar" {
permission java.security.AllPermission;
};
grant codeBase "file:${java.home}/lib/ext/*" {
permission java.security.AllPermission;
};
Java11(Java9模块化后)
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat" {
permission java.security.AllPermission;
};
备注一
如果要查看Monitor标签页的CPU监控和Threads标签页,需要在Tomcat启动参数中添加JMX。
-Dcom.sun.management.jmxremote.port=19999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
备注二
也试过PsTools的psexec工具,虽然能将jstatd.exe提权为System启动,但VisualVM无法监控。而使用sc create创建的jstatd无法则无法启动。
当然除了使用NSSM工具注册为Windows Services,也可以使用instsrv.exe和srvany.exe工具完成,具体可参考下面链接。
参考文档
https://blogs.oracle.com/nbprofiler/monitoring-java-processes-running-as-a-windows-service
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓