利用VisualVm远程监控Java进程

分为启动jstatd和启动JMX两部分

一、在远程主机上启动jstatd

要实现远程监控Java进程,必须在远程主机(运行Java程序的主机)上跑一个jstatd进程,这个进程相当于一个agent,用来收集远程主机上的JVM运行情况,然后用VisualVm连接到这个jstatd,从而实现远程监控的目的。

注意VisualVM的下载地址,从github下载

1、需要在启动jstatd时提供一个security policy文件,新建文件jstatd.all.policy,文件内容如下:

grant codebase "file:/usr/lib/jvm/java-1.8.0-openjdk-amd64/lib/tools.jar" {  
    permission java.security.AllPermission;  
};

说明:根据本机配置修改java安装路径

2、然后运行下面命令启动: 

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.105 -J-Djava.rmi.server.logCalls=true 

说明:

1)IP地址为远程访问该主机使用的地址,如果主机在阿里云且有内网、外网两个IP地址,则此处使用外网IP地址

2)运行该命令后,会打开2个端口,使用 命令netstat -lpnt|grep jstatd可查看到所打开端口,需要在防火墙上配置外网可访问该端口,其中1099位固定打开的端口,另外一个端口为随机打开,每次都要在防火墙上配置该端口

3)-J-Djava.rmi.server.logCalls=true 为输出日志,可不用该参数

3、配置VisualVM

打开VisualVM,右键点击Remote,选择Add Remote Host

你就能看到远程主机上的Java进程了。

需要注意的是如果你点开一个远程进程,那么你会发现有些信息是没有的,比如:CPU、线程、和MBeans。这是正常的,如果需要这些信息(就像监控本地Java进程一样),那么就需要用JMX

二、配置JMX

1、服务端配置命令

java -Xms8000m -Xmx14000m -Djava.rmi.server.hostname=192.168.1.105 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar netty-test-0.0.1-SNAPSHOT.jar

关键部分已标红,说明:

1) IP地址为远程访问该主机使用的地址,如果主机在阿里云且有内网、外网两个IP地址,则此处使用外网IP地址

2)9999为端口,需要在防火墙配置可访问到该端口

2、配置visualVM

IP地址上点击右键,选择Add JMX Connection

输入端口9999

此时可访问完整的CPU、Threads、Memory等信息

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值