java性能監控處理工具


一常用工具命令學習

1.Jps 虛擬機進程狀況工具

功能:和UNIX PS  命令近似,列出正在運行的虛擬機進程,顯示虛擬機運行主類和本地虛擬機唯一進程ID (LVMID)

ex:jps -l

選項 作用
-q 只輸出LVMID,省略主類名稱
-m 輸出虛擬機啟動時傳遞給主類main()函數參數
-l 輸出主類全名,如果進程執行的是jar包,輸出jar路徑
v 輸出虛擬機進程啟動的JVM 參數

 

2.jstat 虛擬機統計信息監控工具

功能:監控虛擬機各種運行狀態的工具,可以顯示本地或者遠程的虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等數據

jstat vmid interval count

interval 查詢間隔 count 查詢次數

ex:jstat -gc 19277 500 5  

選項 作用
-class 監控類加載、卸載數量、總空間以及類裝載所耗費的時間
-gc 監控java堆情況,包括Eden區,兩個survivor區,老年代,永久代等使用量、已用空間和耗時時間
-gcutil 監控內容與-gc基本相同,以百分比的形式標注使用空間和總量
-gccause 與-gcutil功能一致,附帶最后一次GC的原因
......  

 

3.jinfo java配置信息工具

實時查看調整虛擬機各項參數

java -XX:+PrintCommandLineFlags -version

4.jmap java內存映像工具

功能:用於生成堆轉儲快照(heapdump或dump文件),查詢finalize執行隊列,Java堆和永久代詳細信息(空間使用率,哪種收集器)。

選項 作用
-dump 生成堆轉儲快照。格式:-dump:format=b,file=xx
-finalizerinfo 顯示F-Queue中等待Finalizer線程執行finalize方法的對象
-heap 顯示堆詳細信息,使用哪種回收期、參數配置、分代情況等
-histo 顯示堆中對象統計信息,包括類、實例數量、合計容量
-F -dump沒反應,強制生成堆快照

jmap -dump:format=b,file=demo.bin 3500

jmap -histo:live 22583 | head -10

5.jhat 堆分析工具 (eclipse的mat更強大)

功能;內置小型HTTP服務,生成dump文件的分析結果可在web頁面分析

jhat demo.bin

6:jstack java堆棧跟蹤工具

功能:生成當前時刻的線程快照,線程快照是當前虛擬機當前每一條線程執行的方法堆棧集合,生成快照主要為了定為線程執行時間過長的原因。

jstack vmid

選項 命令
-F 強制輸出堆棧信息
-l 除了堆棧,顯示關於鎖的信息
-m 調用本地方法,可以顯示C/C++堆棧

二.線上故障案例分析

1.服務器部署若干服務,CPU報警。如何定位CPU過高,內存過載問題

  1. 找到最高的CPU進程 top -c 
        如上圖,最耗CPU的進程PID為19277
     2.找到最耗CPU線程 top -Hp 19277
        鍵入P 排序

        

      3.將線程PID轉化為16進制

       printf "%x\n" 19755

     4.查看堆棧信息  

      jstack 19277 |grep '4d2b' -C5 --color

    

 

2.定位內存溢出,OutOfMemeryError異常問題

模擬內存溢出demo

-verbose:gc -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/yangtuo/dump

package com.yangtuo.jvm;

import java.util.ArrayList;
import java.util.List;

public class HeapOOM {

static class OOMObject{

}

public static void main(String args[]) {
List<OOMObject> list = new ArrayList<OOMObject>();
try {
Thread.sleep(20000L);
  } catch (InterruptedException e) {
e.printStackTrace();
  }
while (true){
list.add(new OOMObject());  
  }
   }
}

 

MAT 分析dump文件 ,對象占用內存比例判斷出存在大對象

查看詳情

三.JVM 參數調優

-Xms -Xmx -Xmn -Xss

1.盡可能讓對象留在年輕代

2.大對象直接進入老年代

-XX:PretenureSizeThreshold 3M  大於這個數直接在老年代分配

3.長期存活對象直接進入老年代

Minor GC后仍然存活並進入suvivor區,每次GC年齡+1

設置GC進入老年代的閥值 -XX:MaxTenuringThreshold=1 

默認-XX:MaxTenuringThreshold=15

驗證jdk8和jdk7 結果不一致

1.7

1.8 MaxTenuringThreshold=1

1.8 MaxTenuringThreshold=15

 


免責聲明!

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



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