使用jvisualvm和飞行记录器分析Java程序cpu占用率过高

一、jvisualvm使用

     JDK1.6中Oracle提供了一个新的JVM监控工具:jvisualvm。下面重点介绍如何在本地通过远程的方式打开Linux服务器上的jvisualvm.

     1、Xmanager安装

     由于jvisualvm为可视化监控工具,在本地远程服务器时,为了保证能够打开jvisualvm首先必须在本地安装Xmanager;

     2、启动jvisualvm

          进入Linux JDK Bin目录下,然后分别运行如下命令启动jvisualvm:

          (1)export DISPLAY=本地IP:0

          (2)./jvisualvm &

      jvisualvm启动后如下图所示:

    

二、飞行记录器的使用

       为了分析和定位一个Java线上系统问题,我们需要查看JVM启动时的一些参数设置,例如:垃圾回收算法、堆大小等等。这些参数可能在启动脚本中明确指明,也可能采用默认值。在系统运行过程中其他人也许动态调整了系统参数。 如何实时查看正在运行的JVM的参数呢?此时我们可以使用jcmd.

       jcmd是从JDK 7开始引入的一个JVM诊断命令行工具,可以向运行中的JVM发送诊断命令。因此要求JDK版本不得低于jdk1.8.0,也可以检查本地jdk安装目录下是否有jmc.exe文件(本地打开jfr工具),如下所示:

      在保证了JDK版本的前提下,欲使Linux上下载下来的jfr文件能在本地运行,还需要在搭有Linux环境的服务器JVM中添加如下参数:

 -XX:+UnlockCommercialFeatures -XX:+FlightRecorder ,配置完成后如下所示:

 JAVA_OPTS="$JAVA_OPTS -d64 -XX:NewRatio=3 -Xms16g -Xmx128g -XX:PermSize=128M -XX:+UnlockCommercialFeatures -XX:+FlightRecorder"

     然后在Linux环境上运行如下命令生成jfr文件:

  jcmd pid JFR.start delay=1s duration=60s name=serverRecording filename=recording_`date +%Y%m%d%H%M%S`.jfr settings=profile

     待文件生成成功后,下载相应的jfr双击即可查看相关信息。(代码->热点方法->堆栈跟踪)

     使用到的其它命令如下:

      jcmd                           ----查看JVM进程的PID
      jcmd -l                       
      jcmd pid Thread.print   ----打印堆栈信息,功能类似于jstack -m pid

     飞行记录器的示例如下:

  

三、Xmanager配置访问Linux图形化界面

  

 

原文地址:https://www.cnblogs.com/moonandstar08/p/4902972.html