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扫描下方二维码关注公众号和小程序↓↓↓