JVM问题排查也不是很难--工具使用

目录

  • 概述
  • 环境准备
  • 工具介绍
  • 远程连接方式
  • 开启JMX
  • 工具远程连接
  • 参考文献

概述

    线上环境中,程序越来越慢,一头雾水?遇到程序经常宕机,但找不到原因?排查问题却经常记不住命令? 那是没找到好的方法而已,本文将介绍一下JVM问题排查工具的使用, 工具仅仅是工具,还是需要知道一些JVM知识才可以看懂工具中的参数哟..

 转帖请注明原贴地址: https://my.oschina.net/u/2342969/blog/2987769

环境准备

  • centos 7
  • JDK1.8(6 or 7)
  • 可运行java应用

工具介绍

    jdk自带的可视化排查工具有jconsole和jvisualvm两个,两款工具各有千秋,下面简单说一下博主对两款工具的选择

  • 查看线程死锁问题优先选用的jconsole, why? 因为它有一个检查死锁的按钮可以操作.
  • 堆和线程dump选用的jvisualVM,why? 因为它有对应功能的按钮可以点击
  • 其他场景均使用的jvisualVM

注意:它们均位于 ${JAVA_HOME}/bin 下面

远程连接方式

    由于线上服务器是没有可视化界面的,使用可视化工具是没有任何效果的,基本是本地启动工具,远程监控服务器的jvm。

酱紫就会涉及到如何远程连接jvm,远程连接的方式有两种,jstatd和jmx。本文将只介绍jmx连接方式,因为jstatd连接会有权限问题,有一些功能无法正常使用

开启JMX

    现在java应用基本spring boot大一统,下面将介绍一下spring boot应用采用JMX远程监控JVM的方式。

一般spring boot应用启动命令如下(线上肯定需要配一些jvm参数,这里不再赘述):

java -Xms500m -Xmx1024m -jar /opt/spring-boot-test.jar --Dspring.profiles.active=test --Dserver.port=8181

启动jmx的启动方式如下:

java -Xms500m -Xmx1024m -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar /opt/spring-boot-test.jar --Dspring.profiles.active=test --Dserver.port=8181

-Dcom.sun.management.jmxremote.port: jmx远程端口

-Dcom.sun.management.jmxremote.ssl: 是否开启ssl认证

-Dcom.sun.management.jmxremote.authenticate:是否开启ssl认证

本文仅仅简单演示,如需更多安全配置,请查阅参考文献

注意:这样子开启后,仍然会无法连接

远程连接时会报错: 无法使用 service:jmx:rmi:///jndi/rmi://192.168.1.104:3333/jmxrmi 连接到 172.16.0.140:3333

报错原因是:jmx除了远程端口外,还监听了其他端口,通过命令查看其他监听端口

查看应用进程号:

#ps aux|grep spring-boot-test

根据应用进程号,查看监听端口

#netstat -antup|grep <pid>

如图可以看到,除了远程端口3333外,还监听了40639和36677两个端口, 所以需要开放这两个端口,本文使用的centos 7 默认防火墙使用的firewalld,其他防火墙自行查阅资料开启端口

#firewall-cmd --zone=public --add-port=40639/tcp --permanent
#firewall-cmd --zone=public --add-port=36677/tcp --permanent
#firewall-cmd --zone=public --add-port=3333/tcp --permanent
#firewall-cmd --reload

工具远程连接

jconsole远程连接

启动jconsole

#${JAVA_HOME}/bin/jconsole

点击连接,正常连接了就会出现下图,如未正常出现,再详细对比上面步骤

jvisualvm远程连接

启动jvisualvm

#${JAVA_HOME}/bin/jvisualvm

正常启动就会出现上图,下面开始进行远程连接

添加JMX远程连接

进入此页面点击监控就可以看到JVM活动情况,如未出现监控信息,请根据以上步骤依次排查

参考文献

文献来自oracle官网java文档,地址随时可能变化哟

https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/applications_remote.html

https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/jmx_connections.html

猜你喜欢

转载自my.oschina.net/u/2342969/blog/2987769