VisualVM 监控注册成 Windows 服务的 Tomcat 之 jstatd 方式一
VisualVM Windows 诊断工具 About 1,959 words说明
jstatd方式监控与JMX方式多了一个可以观察GC的特点,即Visual GC可以展示堆区及GC情况。
注意
因为Tomcat是以Windows Services方式启动,启动Tomcat的用户是SYSTEM,比Administrator更高级别。所以,如果只是普通的启动jstatd是无法监控到Tomcat信息的。
即使把Tomcat使用指定用户名启动,且jstatd同样使用该用户启动,也无法监控到。
再即使使用提权工具psexec启动jstatd,同样无法监控到。
前提条件
打开Windows Services的Tomcat的属性,选择Log On标签页,选择Local System account,重启一下服务。
下文创建的jstatd的Windows Services也以Local System account启动。
解决方法
安全策略文件
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之后就使用此配置文件了,因为Java11是LTS所以就以Java11为例子了。
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat" {
permission java.security.AllPermission;
};
脚本方式
指定了jstatd监听12345端口,且安全策略使用C:\jstatd.all.policy文件。
@echo off
"C:\jdk-11\bin\jstatd.exe" -p 12345 -J-Djava.security.policy=C:\jstatd.all.policy
创建服务
sc create jstatd binpath= "C:\jstatd.bat"
启动服务
打开Windows Services,找到jstatd服务,点击启动后可以直接点击取消,查看任务管理器中是否已经有jstatd.exe进程启动,且用户名是SYSTEM。
命令方式
CMD中直接创建服务,双引号添加了转义符。
sc create jstatd2 binpath= "\"C:\jdk-11\bin\jstatd.exe\" -p 12345 -J-Djava.security.policy=\"C:\jstatd.all.policy\""
CMD中直接启动服务
sc start jstatd2
报错不用管,jstatd.exe进程已经启动,可以通过任务管理器查看。
C:\WINDOWS\system32>sc start jstatd2
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.
查看 VisualVM
添加jstatd连接,输入端口为12345,即可查看到本机所有的Java服务了。
备注
如果要查看Monitor标签页的CPU监控和Threads标签页,需要在Tomcat启动参数中添加JMX。
-Dcom.sun.management.jmxremote.port=19999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
参考
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jstatd.html
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create
https://blogs.oracle.com/nbprofiler/monitoring-java-processes-running-as-a-windows-service
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓