利用VisualVm和JMX远程监控Java进程

原文地址

前一篇文章里我们发现通过jstatd + VisualVm的方式,不能获得Java进程的CPU、线程、MBean信息,这时JMX就要登场了。

自Java 6开始,Java程序启动时都会在JVM内部启动一个JMX agent,JMX agent会启动一个MBean server组件,把MBeans(Java平台标准的MBean + 你自己创建的MBean)注册到它里面,然后暴露给JMX client管理。简单来说就是每个Java程序都可以通过JMX来被JMX client管理,而且这一切都是自动发生的。而VisualVm就是一个JMX Client。

VisualVm能够自动发现本机的Java进程,如果要监控远程主机上的Java进程则需要显式地配置JMX连接,下面讲配置方法:

第一步:已经用jstatd连接了远程主机

已经根据利用VisualVm远程监控Java进程里的方法在VisualVm里添加了远程主机。

PS. 在实际使用过程中这个似乎不是必须的,但是如果不做,有些信息就会获取不到,因此还是做一下吧。

第二步:与启动相关的System Properties

要给远程主机上的监控的Java进程在启动时必须带上几个JMX相关的System Properties(常用的几个):

  • com.sun.management.jmxremote.port, 指定暴露的JMX端口。
  • com.sun.management.jmxremote.rmi.port, 指定RMI connector端口,可以和com.sun.management.jmxremote.port保持一致。
  • com.sun.management.jmxremote.ssl, 指定是否使用SSL,在开发环境下可以是false,但是在生产环境下强烈建议为true。
  • com.sun.management.jmxremote.authenticate, 指定是否需要密码才能够创建JMX连接。

为了演示目的,我们用Tomcat来测试,不开启ssl和authenticate,把JMX端口设置为1100,执行下列命令启动Tomcat:

CATALINA_OPTS='-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.rmi.port=1100 -Djava.rmi.server.hostname=k8s-oracle' bin/startup.sh

注意上面有一个-Djava.rmi.server.hostname=k8s-oracle参数,JMX agent本质上也是一个RMI server,因此需要指定这个参数,否则就会像利用VisualVm远程监控Java进程里提到的一样,VisualVm无法连接到该Java进程。

PS. 使用SSL方式保护JMX连接的方法会另写文章说明。

第三步:创建JMX连接

在远程主机上右键,选择添加JMX连接(在下图里出现了之前启动的Tomcat进程):

根据Java进程启动时设置的JMX System Properties配置JMX连接:

成功后你会发现多了一个进程,小图标上有JMX字样:

双击这个进程,你就能看到CPU、线程、还有MBeans了。

参考资料

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

分布式系统工具箱 Spring Cloud 概览

Spring Cloud 是什么 Spring Cloud 为分布式系统的开发提供了一套工具集,基于 Spring Boot,可以帮我们快速的实现分布式系统中常...

2966
来自专栏静默虚空的博客

[Spring]01_环境配置

1.1 Spring jar包下载 (1)进入官网http://repo.spring.io (2)在资源库界面点击Artifacts标签,然后点击libs-...

1879
来自专栏大数据-Hadoop、Spark

Flume的安装与综合使用

Flume + Kafka基本是日志实时采集的标准搭档了。 本篇文章基于Flume-ng-1.6.0-cdh5.7.0 + CentOS6.7 + JDK1...

2716
来自专栏CaiRui

Python flask虚拟环境安装

1、安装virtualenv ? 2、在当前路径下创建文件夹,启动虚拟环境 ? 3、在使用虚拟环境前需激活,前面出现(env说明在虚拟环境中)。虚拟环境中默认安...

23910
来自专栏JAVA同学会

Eureka服务注册中心

  最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样。要想很短时间内掌握Spring Cloud是不可...

2961
来自专栏阿杜的世界

Spring Boot:定制servlet filters

在实际的web应用程序中,经常需要在请求(request)外面增加包装用于:记录调用日志、排除有XSS威胁的字符、执行权限验证等等。除了上述提到的之外,Spri...

751
来自专栏noteless

spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。

1406
来自专栏互联网开发者交流社区

SpringBoot启动器

1483
来自专栏我的技术专栏

Linux安装python3.5

1725
来自专栏java工会

一文搞懂spring工作的流程

1345

扫码关注云+社区