天天看點

JVM常用指令以及JVM調優

文章目錄

    • 1.指令檢視程序`jps`
    • 2.檢視執行個體大小`jmap -histo 14900 > ./log.txt` 【定位記憶體】
    • 3.檢視堆大小資訊`jmap -heap 14900`【定位記憶體】
    • 4.堆記憶體快照dump【定位記憶體】
    • 5.運作線程的資訊jstack 【檢視線程 飙升的原因】
    • 6.檢視正在運作的java應用程式的擴充參數 `jinfo`
    • 7.jstat指令可以檢視堆記憶體各部分的使用量

1.指令檢視程序

jps

JVM常用指令以及JVM調優

linux下檢視pid

jps -l
或者
ps -ef | grep java
           

2.檢視執行個體大小

jmap -histo 14900 > ./log.txt

【定位記憶體】

JVM常用指令以及JVM調優

log.txt

JVM常用指令以及JVM調優

num序号

instances 執行個體數量

bytes 占用空間大小

class name 類名稱 【C is a char[]】【S is a short[]】【I is a int[]】【B is a byte[]】

3.檢視堆大小資訊

jmap -heap 14900

【定位記憶體】

JVM常用指令以及JVM調優

4.堆記憶體快照dump【定位記憶體】

jmap ‐dump:format=b,file=eureka.hprof 14660

也可以設定記憶體溢出自動導出dump檔案(記憶體很大的時候,可能會導不出來)

1. -XX:+HeapDumpOnOutOfMemoryError

2. -XX:HeapDumpPath=./   

JVM設定 出現記憶體溢出的時候,将堆記憶體快照資訊列印到檔案内:
‐Xms10M ‐Xmx10M ‐XX:+PrintGCDetails ‐XX:+HeapDumpOnOutOfMemoryError ‐XX:HeapDumpPath=D:\jvm.dump
           

jvm自帶分析工具:

jvisualvm

指令工具導入該 dump 檔案分析 【檔案】—》【裝入】

5.運作線程的資訊jstack 【檢視線程 飙升的原因】

jstack

程序号 檢視目前狀态下的 運作線程資訊

“Thread-1” 線程名

prio=5 優先級=5

tid=0x0000001fgsd000 線程id

pid=0xed64 線程對應本地線程辨別

java.lang.Thread.State:BLOCKED 線程狀态

Found one Java-level deadlock 發現死鎖

jvisualvm 可以檢測出現死鎖

【檢視線程 飙升的原因】

jps檢視程序号:

1,使用指令top -p ,顯示你的java程序的記憶體情況,pid是你的java程序号,比如19663

2,按H,擷取每個線程的記憶體情況

3,找到記憶體和cpu占用最高的線程tid,比如196644,轉為十六進制得到 0x4cd0,此為線程id的十六進制表示

5,執行 jstack 19663|grep -A 10 4cd0,【注意十六進制需要小寫】得到線程堆棧資訊中 4cd0 這個線程所在行的後面10行,從堆棧中可以發現導緻cpu飙高的調用方法

6,檢視對應的堆棧資訊找出可能存在問題的代碼

6.檢視正在運作的java應用程式的擴充參數

jinfo

檢視正在運作的java應用程式擴充參數 :

jinfo -flags <pid>

檢視java jvm系統參數:

jinfo -sysprops <pid>

7.jstat指令可以檢視堆記憶體各部分的使用量

jstat指令可以檢視堆記憶體各部分的使用量,以及加載類的數量。

指令的格式如下:jstat [-指令選項] [vmid] [間隔時間(毫秒)] [查詢次數]

注意:使用的jdk版本是jdk8

jstat -gc pid 最常用,可以評估程式記憶體使用及GC壓力整體情況

JVM常用指令以及JVM調優

S0C:第一個幸存區的大小,機關KB

S1C:第二個幸存區的大小

S0U:第一個幸存區的使用大小

S1U:第二個幸存區的使用大小

EC:伊甸園區的大小

EU:伊甸園區的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法區大小(元空間)

MU:方法區使用大小

CCSC:壓縮類空間大小

CCSU:壓縮類空間使用大小

YGC:年輕代垃圾回收次數

YGCT:年輕代垃圾回收消耗時間,機關s

FGC:老年代垃圾回收次數

FGCT:老年代垃圾回收消耗時間,機關s

GCT:垃圾回收消耗總時間,機關s

-Xms1536M -Xmx1536M -Xmn600M -Xss1M -XX:SurvivorRatio=6 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly

-Xms1536M 堆空間
-Xmx1536M 堆空間
-Xmn600M  年輕代空間
-Xss1M    棧空間
-XX:SurvivorRatio=6  eden和servior的比值 
-XX:MetaspaceSize=256M  元空間
-XX:MaxMetaspaceSize=256M 元空間
-XX:+UseParNewGC  年輕代使用 Parnew 
-XX:+UseConcMarkSweepGC 老年代使用 CMS
-XX:CMSInitiatingOccupancyFraction=80 當老年代達到預設值的 80 % 的時候觸發 full gc
-XX:+UseCMSInitiatingOccupancyOnly
 
           

cms 初始标記 并發标記 重新标記 并發清理 并發重置

G1 初始标記 并發标記 最終标記 篩選回收

測試 項目 JVM調優開發:

-Xms1536M -Xmx1536M -Xmn512M -Xss1M -XX:SurvivorRatio=6 -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M
 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly