• 使用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图形化界面

      

     

  • 相关阅读:
    二分思想判断数组中是否有两数和为sum
    VC中#pragma warning指令
    (转)预编译头文件
    成为一名优秀程序员所需要知道的那些事
    SetThreadAffinityMask设置使用多核CPU的哪个核心
    DirectX 3D 设备丢失(lost device)的处理
    转载 CreateWaitableTimer和SetWaitableTimer函数
    转赵青《剑侠情缘网络版》开发回顾
    转载使用PostThreadMessage在Win32线程间传递消息
    VC使用CRT调试功能检测内存泄漏
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/4902972.html
Copyright © 2020-2023  润新知