VisualVM 监控注册成 Windows 服务的 Tomcat 之 jstatd 方式二

VisualVM Tomcat Windows 大约 1426 字

现象

前文已经通过JMX能监控到JVM的堆栈等信息了,但是对于插件Visual GCVisualVM 2.0.6还是无法监控安装成Windows ServicesTomcat

排查

发现TomcatWindows ServicesVisualVM的列表中,但是双击打开就是显示:不受JVM支持。

后发现TomcatWindows ServicesLog On As指定了当前用户,所以导致VisualVM无法监控。

但改成了Local System后发现,Visual VM无法发现这个Tomcat进程了。

前提设置

打开Windows ServicesTomcat的属性,选择Log On标签页,选择Local System account,重启一下服务。

关键设置

下载NSSMhttps://nssm.cc/download,将jstatd安装成服务。

NSSM 使用

下载后执行以下命令(安装一个名为jstatdWindows Services),会弹出一个窗口,Path中选择jstatd.exe文件所在的文件(JDKbin目录下)。

./nssm install jstatd

Arguments一栏中,添加jstatd.exe的启动参数。端口号及安全策略文件。

-p 12345 -J-Djava.security.policy=C:\jstatd.all.policy

点击Install Services后会提示安装成功,可以在Windows Services中看到名为jstatd的服务,启动之,即可正常在VisualVMVisual 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;
};

Java11Java9模块化后)

grant codebase "jrt:/jdk.jstatd" {
   permission java.security.AllPermission;
};

grant codebase "jrt:/jdk.internal.jvmstat" {
   permission java.security.AllPermission;
};

备注

也试过PsToolspsexec工具,虽然能将jstatd.exe提权为System启动,但VisualVM无法监控。而使用sc create创建的jstatd无法则无法启动。

当然除了使用NSSM工具注册为Windows Services,也可以使用instsrv.exesrvany.exe工具完成,具体可参考下面链接。

参考文档

https://blogs.oracle.com/nbprofiler/monitoring-java-processes-running-as-a-windows-service

https://nssm.cc

https://github.com/kirillkovalenko/nssm

阅读 138 · 发布于 2021-08-01

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批