Play运维技巧 - 使用JMX开启远程性能监控

原创
2016/05/25 17:06
阅读数 1.3K

1. 为什么需要性能监控?

      有时我们会发现Java程序在运行一段时间之后速度会变慢,导致变慢的原因有很多,比如数据库延迟太高,线程死锁,频繁的Full GC等等。通常遇到这种情况时,我们可以通过top或htop命令查看Java进程的CPU和内存的占用情况,但是无法准确的找出系统变慢的原因。这时我们就需要一种方式可以实时的查看Java虚拟机的运行情况,进而发现系统变慢的原因。本文将介绍如何通过JMX进行Java性能的远程监视。

2. 什么是JMX?

      JMX(Java Management Extensions)是在Java5中提出的一个Java系统管理和监控的标准,目前最新的版本是1.4,发布于2006年11月9日。JMX的目标是为开发者提供一个框架,基于该框架可以很容易地开发一套功能强大的Java虚拟机管理系统。

3. 如何开启JMX?

      为了保证系统的安全性,JMX提供了两种认证方式,一种是基于密码的认证,另一种是基于SSL证书的认证。在开发环境下,可以暂时关闭认证,在生产环境下,可以根据需要选择密码方式或是SSL证书方式。

3.1 在开发模式下开启JMX

      开发模式下要追求快速、高效,可以通过设置如下参数暂时关闭认证:

com.sun.management.jmxremote.authenticate=false

示例:

nohup ./play-app -J-Xmx1g -Dcom.sun.management.jmxremote.port=9900 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=HOST_NAME > ../log.txt&

其中9900是JMX监听端口,请HOST_NAME替换成运行Play应用的服务器主机名或IP地址。

3.2 在生产模式下开启JMX

      生产模式下更加注重安全性,如无参数指定,JMX默认采用密码认证方式,用户列表和访问权限定义在如下两个文件中:

JRE_HOME/lib/management/jmxremote.password
JRE_HOME/lib/management/jmxremote.access

如果jmxremote.password文件不存在,则从模板文件拷贝一份:

cp JRE_HOME/lib/management/jmxremote.password.template JRE_HOME/lib/management/jmxremote.password

编辑jmxremote.password文件,内容如下:

monitorRole  123456
controlRole  123456

编辑jmxremote.access文件,内容如下:

monitorRole   readonly
controlRole   readwrite

修改这两个文件的访问权限,否则启动时会报错:

chmod 600 jmxremote.password
chmod 600 jmxremote.access

OK,准备工作做完了,使用下面命令启动Play应用:

 nohup ./play-app -J-Xmx1g -Dcom.sun.management.jmxremote.port=9900 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=HOST_NAME > ../log.txt&

4. 连接JMX开始监控

    JDK内置了两个JMX客户端工具,分别是jconsole和jvisualvm,位于JDK的bin目录下。连接时请勾选“不要求SSL连接”,下面是jvisualvm连接成功后的截图:

5. 参考文献

Monitoring and Management Using JMX Technology

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
6 收藏
2
分享
返回顶部
顶部