VisualVM 监控注册成 Windows 服务的 Tomcat 之 jstatd 方式二
VisualVM Tomcat Windows 大约 1618 字现象
前文已经通过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扫描下方二维码关注公众号和小程序↓↓↓

-
缓存穿透、缓存雪崩、缓存击穿、缓存污染阅读 1288
-
Arthas 使用 stack 查找指定方法是被谁调用的阅读 1334
-
Java 并发编程之 ConcurrentHashMap 1.7 源码分析阅读 440
-
Java 测试迭代集合耗时阅读 1922
-
Android 仿 QQ 消息提示可拖拽控件 DragBadgeView阅读 2008
-
Android 调节手机亮度阅读 3160
-
MySQL 条件查询阅读 805
-
Elasticsearch health status 显示为 yellow 解决方法阅读 8939
-
Docker 部署 MySQL阅读 365
-
Spring 循环依赖阅读 576