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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM