如何部署jstatd监视tomcat?

Linux基础

1 基础知识

2.1 RMI的概念

– RMI为Remote Method Invocation的缩写
– RMI中文翻译为远程方法调用
– RMI支持JVM中的代码通过网络远程调用另外一个JVM的某个方法
– RMI提供服务的一方称为服务器,而实现远程代用的一方称为客户端

2.2 jstatd的介绍

– jstatd命令是一个RMI服务器应用程序
– jstatd用于监视已检测的Java HotSpot VM的创建和终止
– jstatd支持通过接口来启用远程监视
– jstatd支持收集有关JVM进程的信息

2 最佳实践

2.1 环境配置

请参阅如下文章搭建Tomcat运行环境,

如何基于RHEL 9.x部署TomCat之二?

2.2 配置服务端

2.2.1 手动测试

sudo -u tomcat /usr/java/jdk-15.0.2/bin/jstatd -J-Djava.net.preferIPv4Stack=true -J-Djava.rmi.server.logCalls=true -p 1099 -r 1100

如果显示如下错误,

Could not create remote object
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
        at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
        at java.base/java.security.AccessController.checkPermission(AccessController.java:1036)
        at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:408)
        at java.base/java.lang.System.setProperty(System.java:911)
        at jdk.jstatd/sun.tools.jstatd.Jstatd.main(Jstatd.java:153)

你需修使用如下命令改如下策略问题,

cp ${JAVA_HOME}/conf/security/java.policy ${JAVA_HOME}/conf/security/java.policy.save
vim ${JAVA_HOME}/conf/security/java.policy

加入如下配置,

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

程序运行后,你可以使用如下命令获取进程号,

pgrep -u tomcat jstatd

可见如下显示,

3629

可以使用如下命令查看程序监听的端口,

netstat -antp | grep `pgrep -u tomcat jstatd`

可见如下显示,

tcp        0      0 0.0.0.0:1099            0.0.0.0:*               LISTEN      3629/jstatd         
tcp        0      0 0.0.0.0:1100            0.0.0.0:*               LISTEN      3629/jstatd  

2.2.2 配置服务控制脚本

cat > /usr/lib/systemd/system/jstatd.service << EOF
[Unit]
Description=Monitor the creation and termination of instrumented Java HotSpot VMs
After=network.target

[Service]
Type=exec

Environment="JAVA_HOME=/usr/java/jdk-15.0.2"
ExecStart=/usr/java/jdk-15.0.2/bin/jstatd -J-Djava.net.preferIPv4Stack=true -J-Djava.rmi.server.logCalls=true -p 1099 -r 1100
User=tomcat
Group=tomcat
UMask=0007
StandardOutput=file:/var/log/tomcat/jstatd.log
StandardError=file:/var/log/tomcat/jstatd.log
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
EOF

修改完脚本后,你需要使用如下命令重载服务,

systemctl daemon-reload

你可使用如下命令控制服务和查询状态,

systemctl start jstatd.service
systemctl status jstatd.service
systemctl stop jstatd.service
systemctl restart jstatd.service

测试完毕,建议你使用如下命令设置服务自动启动,

systemctl enable jstatd.service

2.2.3 配置防火墙

firewall-cmd --permanent --add-port 1099/tcp --add-port 1100/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.3 连接服务端

2.3.1 安装客户端

如何安装Debian JVisualVM?

2.3.2 连接服务端


如上图所示,
键入“Host name”的IP地址,范例为“192.168.0.22”
单击【OK】即可见到如下显示,

参阅文档
=====================
RMI的概念
—————
https://www.liaoxuefeng.com/wiki/1252599548343744/1323711850348577

jstatd的使用
—————-
https://docs.oracle.com/en/java/javase/15/docs/specs/man/jstatd.html
https://docs.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html
https://manpages.debian.org/testing/openjdk-15-jdk-headless/jstatd.1.en.html

策略文件的修改方法
———————–
https://copyprogramming.com/howto/starting-jstatd-in-java-9

启动命令格式
——————–
https://drmanalo.github.io/blog/2017/monitor-remote-jvm.html

没有评论

发表回复

Linux基础
如何熟悉Linux的PAM模块

1 PAM的简介 1.1 PAM的概念 – PAM即Pluggable Authenti …

Linux基础
如何配置RHEL 8.x OpenSSH客户端登录自动过期?

1 前言 一个问题,一篇文章,一出故事。 基于服务器安全,笔者需要让OpenSSH客户端在10分钟内 …

Linux基础
如何安装部署SentinelOne EDR?

1 基础知识 1.1 软件公司介绍 SentinelOne,Inc.是一家在纽约证券交易所上市的美国 …