文章目錄
1. JVM的參數類型
系統分析java的參數類型可以劃分爲一下三種類型,XX參數爲最常用的一些命令類型。
1. 標配參數
比如-version(顯示當前jjava的版本)、-help(尋找幫助文檔)、-showversion(輸出產品版本並繼續)等,幾乎不會改變。
2. X參數
設置java的執行模式
比如-Xint,解釋執行模式;-Xcomp,編譯模式;-Xmixed,開啓混合模式(默認)
3. XX參數
這一類是通常jvm調優需要關注的參數,又可以按照參數類型劃分爲如下兩種:
1.布爾類型
公式:-XX:+某個屬性、-XX:-某個屬性,開啓或關閉某個功能。其中+表示開啓,-表示關閉
比如-XX:+PrintGCDetails
(是否打印GC的收集信息),開啓GC詳細信息。
可以通過如下命令查看jvm對應的信息是否開啓
- jps -l // 通過該命令查看對一個的後臺運行java程序
- // jinfo -flag PrintGCDetails 進程號 查看具體的信息
下圖中表示該進程沒有開啓GC詳細信息收集
當然可以在程序啓動時添加對應的信息,也可以在控制檯開啓。
2. KV鍵值類型
- 通常用於設置或者查看一些基本信息
公式:-XX:屬性key=值value。比如-XX:Metaspace=128m、-XX:MaxTenuringThreshold=15。
- 如何查看一些常用基礎設置
使用jps -l配合jinfo -flags pid可以查看所有參數。
也可以使用java -XX:+PrintFlagsInitial
查看默認設置
-
查看修改之後的設置值
java -XX:+PrintFlagsFinal
與上面類似。只是修改過後是:=
而不是=
。 -
查看常見參數
如果不想查看所有參數,可以用java -XX:+PrintCommandLineFlags
查看常用參數。
-XX:InitialHeapSize=134217728
-XX:MaxHeapSize=2147483648
-XX:+PrintCommandLineFlags
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseParallelGC
2. 基本的參數
1. -Xmx/-Xms
-Xmx等價於 -XX:InitialHeapSize
-Xms等價於-XX:maxHeapSize
最大和初始堆大小。最大默認爲物理內存的1/4,初始默認爲物理內存的1/64。
2. -Xss
等價於-XX:ThreadStackSize
。用於設置單個棧的大小,系統默認值是0,不代表棧大小爲0。而是根據操作系統的不同,有不同的值。比如64位的Linux系統是1024K,而Windows系統依賴於虛擬內存。
3. -Xmn
新生代大小,一般不調。
4. -XX:MetaspaceSize
設置元空間大小。(元空間本質和永久代類似,不在虛擬機中,使用的是本地內存)
可以通過如下命令設置元空間大小
jinfo -flag MetaspaceSize=21807154 13014
5.-XX:+PrintGCDetails
輸出GC收集信息,包含GC和Full GC信息。
6.-XX:SurvivorRatio
新生代中,Eden區和兩個Survivor區的比例,默認是8:1:1。通過-XX:SurvivorRatio=4改成4:1:1
7.-XX:NewRatio
老生代和新年代的比列,默認是2,即老年代佔2,新生代佔1。如果改成-XX:NewRatio=4,則老年代佔4,新生代佔1。
8.-XX:MaxTenuringThreshold
新生代設置進入老年代的時間,默認是新生代逃過15次GC後,進入老年代。如果改成0,那麼對象不會在新生代分配,直接進入老年代。
3. 常用命令
1. jps
在第一節中利用到了兩個常見的命令:jps
、jinfo
- jps:JVM process Status Tools(列出正在運行中的虛擬機進程)
命令如下:
jps [常用命令] [進程號]
常用命令 | 作用 |
---|---|
-q | 只輸出進程號 |
-m | 輸出虛擬機進程啓動時傳遞給主類main()函數的參數 |
-l | 進程號 類全稱路徑 |
-v | 虛擬機該進程啓動時的參數 |
主要顯示如下內容:
進程號+正在執行的主類名
2. jinfo
jinfo的用法通過如下:
jinfo [option] (最常用的)
其中[option]通常可用如下命令:
option | 含義 |
---|---|
-flag <name> |
打印對應的虛擬機參數 |
-flag [+|-]<name> |
用於設置boolean類型的參數 +表示開啓,-表示關閉 |
-flag <name>=<value> |
用於設置k-v類型的參數 |
-flags |
打印虛擬機有哪些可以設置的信息 |
-sysprops |
打印java的系統設置 |
<no option> |
打印以上所有的信息 |
-h | -help |
打印幫助文檔信息 |
比如:查看jvm垃圾回收的詳細信息:
jinfo -flag +PrintGCDetails 17017
3. jstack
查看JVM中運行線程的狀態,比較重要。可以定位CPU佔用過高位置,定位死鎖位置。
常用命令:
jstack [ option ] pid
option中可用命令:
命令 | 含義 |
---|---|
-F | 當jstack [-l] pid 沒有反應式,可以用jstack [-F] pid 強制打印堆棧存儲信息 |
-l | 打印堆棧信息,並且會額外打印鎖的信息,通常可用於分析死鎖 |
-m | 打印java及本地C、C++方法的堆棧信息 |
-h | 可以利用 jstack -h 尋求幫助文檔 |
4. jstat
jstat統計信息監視工具
但是一般會借用工具分析
如果真正的用到可以查看官方文檔jstat
5. jmap
JVM內存映像工具。