利用VisualVm远程监控Java进程

原文地址

本文介绍利用VisualVmjstatd来远程监控Java进程的方法。

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

第一步:在远程主机上启动jstatd

要注意的是,jstatd是一个RMI server application,因此在启动时支持java.rmi properties

根据jstatd文档,我们需要在启动jstatd时提供一个security policy文件:

grant codebase "file:${java.home}/../lib/tools.jar" {   
    permission java.security.AllPermission;
};

然后运行下面命令启动:

jstatd -J-Djava.security.policy=jstatd.all.policy

不过这里有一个陷阱,见SO上的这个提问:VisualVm connect to remote jstatd not showing applications。在启动时还得指定rmi server hostname,否则VisualVm无法看到远程主机上的Java进程。所以正确的命令应该是这样:

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=<host or ip>

远程主机的hostname可以随便填,只要VisualVm能够ping通这个hostname就行了。所以说下面这几种情况都是可行的:

  • 远程主机没有DNS name,但VisualVm所在主机的/etc/hosts里配置了some-name <ip-to-remote-host>。jstatd启动时指定-J-Djava.rmi.server.hostname=some-name,VisualVm连接some-name
  • 远程主机经过层层NAT,它的内部ip比如是192.168.xxx.xxx,它的对外的NAT地址是172.100.xxx.xxx。jstatd启动时指定-J-Djava.rmi.server.hostname=172.100.xxx.xxx,VisualVm连接172.100.xxx.xxx
  • 上面两种方式混合,即在VisualVm所在主机的/etc/hosts里配置some-name <ip-to-remote-host-nat-address>。jstatd启动时指定-J-Djava.rmi.server.hostname=some-name,VisualVm连接some-name

还有要注意一点,运行jstatd的用户必须和运行Java程序的用户相同,或者是root,否则会监控不到远程主机上的Java进程。

第二步:启动VisualVm

在你的机器上运行jvisualvm启动VisualVm。按照下面步骤添加远程主机:

第一步

第二步

第三步

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

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

参考资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hbbliyong

Ubuntu 安装 JDK8 的两种方式

ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgra...

1.3K90
来自专栏L宝宝聊IT

Squid代理服务器应用示例

55930
来自专栏noteless

springmvc 项目完整示例03 小结

一般一个项目,主要有domain,dao,service,controller这几个层次,具体的真不清楚的话可以百度一下

37020
来自专栏xiaoxi666的专栏

配置多个git账号的ssh密钥

我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。出于各种原因,自己的 github 项目无法使用公司的...

20620
来自专栏cloudskyme

linux ftp命令参数全集

linux ftp命令参数是我们常用的服务器控制手段。那么我们现在就来介绍一些linux ftp命令参数。希望能帮助大家快速查阅,这些命令都是常用的,肯定会对您...

58490
来自专栏我爱编程

搭建Nginx静态网站

参考文档: 腾讯云开发者实验室:https://cloud.tencent.com/developer/labs

77540
来自专栏史上最简单的Spring Cloud教程

Openresty最佳案例 | 第7篇: 模块开发、OpenResty连接Redis

Lua模块开发 在实际的开发过程中,不可能把所有的lua代码写在一个lua文件中,通常的做法将特定功能的放在一个lua文件中,即用lua模块开发。在lualib...

42870
来自专栏IT笔记

JavaWeb项目架构之NFS文件服务器

NFS简介 NFS(Network File System)即网络文件系统。 主要功能:通过网络(局域网)让不同的主机系统之间可以共享文件或目录。 主要用途:N...

59060
来自专栏吴伟祥

基于 CentOS 搭建 FTP 文件服务

此时,访问 ftp://<您的 CVM IP 地址> 可浏览机器上的 /var/ftp 目录了。

45530
来自专栏Java技术分享圈

杨老师课堂之JavaWeb项目架构之NFS文件服务器

当用户A通过互联网上传文件时,经过负载均衡,随机或者定向分配到某个节点。但是当用户B去下载这个文件的时候,并不确定会向哪个节点发送请求,这样会导致用户存在一定几...

20830

扫码关注云+社区

领取腾讯云代金券