使用 visualvm 连接 jstatd远程监控JVM信息

已邀请:

1、安装visualvm 

下载地址:https://visualvm.github.io/download.html


2、服务端配置,需要启动 jstatd服务,暴露端口,支持从本地的visualvm 连接到 jstatd服务所在主机

jstatd是一个rmi的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如visualvm)可以远程连接到本机的jvms 。注意是jvms,就是说运行jstatd命令后可以用监控工具监控本用户(运行jstatd命令的用户)所有已经启动的java程序。


1、在服务器上新建文件,命名为jstatd.all.policy

内容为:

grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
注:需要替换${java.home}/../为实际的$JAVA_HOME目录


2、在服务器上jstatd.all.policy所在目录下执行下面的命令

$JAVA_HOME/bin/jstatd -J-Djava.security.policy=jstatd.all.policy -p 端口-J-Djava.rmi.server.hostname=IP地址 -J-Djava.rmi.server.logCalls=true

其中jstatd 要执行当前系统可用的,一般$JAVA_HOME下会有

jstatd.all.policy  如果是在该文件当前目录执行,直接如上引入即可,否则需要填写jstatd.all.policy 的绝对地址

-p 端口 为指定 jstatd 的监听端口,后面visualvm 连接 jstatd远程就要通过该端口

IP地址为指定 jstatd 的监听地址,后面visualvm 连接 jstatd远程就要通过该地址


3、启动成功后可以先通过telnet IP 端口 验证连通性, 之后即可启动visualvm 新建host、新建jstatd连接连接到目标主机


jstatd支持的选型


options 
-nr
 当一个存在的RMI Registry没有找到时,不尝试创建一个内部的RMI Registry
-p port 端口号,默认为1099
-n rminame 默认为JStatRemoteHost;如果多个jstatd服务开始在同一台主机上,rminame唯一确定一个jstatd服务
-J jvm选项


-nr
不创建注册表,此选项一般忽略。

-p 端口
指定jstatd服务监听端口。

-n 自定义rmi服务名
指定自定义rmi服务名,默认服务名为“JStatRemoteHost”。

-J-JVM参数
传递给JVM的参数:
-J-Djava.security.policy=all.policy 安全策略,all.policy是一个文件。
如果使用绝对路径指定,可以是-J-Djava.security.policy=\etc\jstatd\all.policy
\etc\jstatd是自己创建的路径。

-J-Djava.rmi.server.logCalls=true console中显示日志,有助于排查问题。

-J-Djava.rmi.server.hostname=192.168.1.8
设置服务绑定的主机IP,这里有个点需要注意,
如果服务端在内网,客户端通过NAT访问服务端,服务端的本机IP可能是192.168.0.4,
客户端访问的IP:192.168.1.8,是服务端的外网IP,
那么这里需要绑定的IP应该是服务端的外网IP:192.168.1.8,
不然客户端虽然能telnet连上服务端的指定端口,但是会被拒绝服务。

要回复问题请先登录注册