文章目錄
-
- 1.指令檢視程序`jps`
- 2.檢視執行個體大小`jmap -histo 14900 > ./log.txt` 【定位記憶體】
- 3.檢視堆大小資訊`jmap -heap 14900`【定位記憶體】
- 4.堆記憶體快照dump【定位記憶體】
- 5.運作線程的資訊jstack 【檢視線程 飙升的原因】
- 6.檢視正在運作的java應用程式的擴充參數 `jinfo`
- 7.jstat指令可以檢視堆記憶體各部分的使用量
1.指令檢視程序 jps
jps
linux下檢視pid
jps -l
或者
ps -ef | grep java
2.檢視執行個體大小 jmap -histo 14900 > ./log.txt
【定位記憶體】
jmap -histo 14900 > ./log.txt
log.txt
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
【定位記憶體】
jmap -heap 14900
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
jinfo
檢視正在運作的java應用程式擴充參數 :
jinfo -flags <pid>
檢視java jvm系統參數:
jinfo -sysprops <pid>
7.jstat指令可以檢視堆記憶體各部分的使用量
jstat指令可以檢視堆記憶體各部分的使用量,以及加載類的數量。
指令的格式如下:jstat [-指令選項] [vmid] [間隔時間(毫秒)] [查詢次數]
注意:使用的jdk版本是jdk8
jstat -gc pid 最常用,可以評估程式記憶體使用及GC壓力整體情況
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