【JVM-03】java虛擬機——jvm調優的基本參數及命令

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對應的信息是否開啓

  1. jps -l // 通過該命令查看對一個的後臺運行java程序
  2. // jinfo -flag PrintGCDetails 進程號 查看具體的信息
    下圖中表示該進程沒有開啓GC詳細信息收集
    在這裏插入圖片描述
    當然可以在程序啓動時添加對應的信息,也可以在控制檯開啓。
    在這裏插入圖片描述

2. KV鍵值類型

  1. 通常用於設置或者查看一些基本信息
    公式:-XX:屬性key=值value。比如-XX:Metaspace=128m、-XX:MaxTenuringThreshold=15。
    在這裏插入圖片描述
  2. 如何查看一些常用基礎設置
    使用jps -l配合jinfo -flags pid可以查看所有參數。

也可以使用java -XX:+PrintFlagsInitial查看默認設置
在這裏插入圖片描述

  1. 查看修改之後的設置值
    java -XX:+PrintFlagsFinal
    與上面類似。只是修改過後是:=而不是=

  2. 查看常見參數
    如果不想查看所有參數,可以用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

在第一節中利用到了兩個常見的命令:jpsjinfo

  1. 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內存映像工具。

發佈了97 篇原創文章 · 獲贊 19 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章