jvm常用命名及參數總結

一、jvm工具
    

    1.jps:虛擬機進程狀況工具(JVM Process Status Tool)


        a).命令格式: jps [options]  [hostid]
        b).-l:輸出主類全名或jar路徑
           -q:只輸出LVMID
           -m: 輸出jvm啓動時傳遞給main()的參數
           -v: 輸出jvm啓動時顯示指定的jvm參數

 

    2.jstat:虛擬機統計信息監視工具(JVM statistics Monitoring)


        a).顯示出虛擬機中的類裝載、內存、垃圾收集器、JIT編譯等運行數據
        b).命令格式: jstat [option vmid [interval[s|ms] [count] ] ]
        c).參數interval和count代表查詢間隔和次數,如果省略,說明查詢一次
        d).舉例:假如沒250毫秒查詢一次進程2764垃圾收集狀況,共查詢20次
                jstat  -gc 2764 250 20 
        e).選項option,代表需要查詢的虛擬機的信息。主要分爲3類:類裝載、垃圾收集、運行期編譯狀況
        f).      
        選項    作用
        -class             監視類裝載、卸載數量、總空間以及類裝載所耗費的時間
        -gc                 監視Java堆狀況,包括Eden區、兩個Survivor區、老年代、永久代等的容量、     已用空間、GC時間合計等信息 
        -gccapacity          監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間 
        -gcutil              監視內容與-gc基本相同,但輸出主要關注已使用空間佔總空間的百分比
        -gccause          與 -gcutil 功能一樣,但是會額外輸出導致上一次GC產生的原因
        -gcnew              監視新生代GC狀況
        -gcnewcapacity      監視內容與 -gcnew 基本相同,輸出主要關注使用到的最大、最小空間
        -gcold              監視老年代GC狀況
        -gcoldcapacity      監視內容與 -gcold 基本相同,輸出主要關注使用到的最大、最小空間
        -gcpermcapacity      輸出永久代使用到的最大、最小空間
        -compiler           輸出JIT編譯器編譯過的方法、耗時等信息 
        -printcompilation     輸出已經被JIT編譯的方法 
            

    3.jmap:java內存印象工具(JVM Memory Map)


        a).命令用於生成heap dump文件,如果不使用這個命令,還闊以使用-XX:    +HeapDumpOnOutOfMemoryError參數來讓虛擬機出現OOM的時候·自動生成dump文件。 jmap不僅能生成dump文件,還闊以查詢finalize執行隊列、Java堆和永久代的詳細信息,如當前使用率、當前使用的是哪種收集器等。
        b).命令格式:jmap  [option] vmid
        c).選項    作用
           -dump    生成堆轉儲快照
           -finalizerinfo     顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
           -heap    顯示Java堆詳細信息
           -histo    顯示堆中對象的統計信息
           -permstat    以ClassLoader爲統計口徑顯示永久代內存狀態。只在Linux/Solaris平臺下有效
           -F    當-dump沒有響應時,強制生成dump快照


    4.jhat虛擬機堆轉儲快照分析工具(JVM head Analysis Tool)


        a).命令是與jmap搭配使用,用來分析jmap生成的dump,jhat內置了一個微型的HTTP/HTML服務器,生成dump的分析結果後,可以在瀏覽器中查看。在此要注意,一般不會直接在服務器上進行分析,因爲jhat是一個耗時並且耗費硬件資源的過程,一般把服務器生成的dump文件複製到本地或其他機器上進行分析。
        b).命令格式:jhat [option] [dumpfile]
        c).選項    作用
-stack    false|true 關閉對象分配調用棧跟蹤(tracking object allocation call stack)。 如果分配位置信息在堆轉儲中不可用. 則必須將此標誌設置爲 false. 默認值爲 true.

-refs    false|true 關閉對象引用跟蹤(tracking of references to objects)。 默認值爲 true. 默認情況下, 返回的指針是指向其他特定對象的對象,如反向鏈接或輸入引用(referrers or incoming references), 會統計/計算堆中的所有對象。

-port    port-number 設置 jhat HTTP server 的端口號. 默認值 7000.

-exclude    exclude-file 指定對象查詢時需要排除的數據成員列表文件(a file that lists data members that should be excluded from the reachable objects query)。 例如, 如果文件列列出了 java.lang.String.value , 那麼當從某個特定對象 Object o 計算可達的對象列表時, 引用路徑涉及 java.lang.String.value 的都會被排除。

-baseline    exclude-file 指定一個基準堆轉儲(baseline heap dump)。 在兩個 heap dumps 中有相同 object ID 的對象會被標記爲不是新的(marked as not being new). 其他對象被標記爲新的(new). 在比較兩個不同的堆轉儲時很有用.

-debug    int 設置 debug 級別. 0 表示不輸出調試信息。 值越大則表示輸出更詳細的 debug 信息.

-version    啓動後只顯示版本信息就退出

-J< flag >    因爲 jhat 命令實際上會啓動一個JVM來執行, 通過 -J 可以在啓動JVM時傳入一些啓動參數. 例如, -J-Xmx512m 則指定運行 jhat 的Java虛擬機使用的最大堆內存爲 512 MB. 如果需要使用多個JVM啓動參數,則傳入多個 -Jxxxxxx.      

 

    5.jstack:java堆棧跟蹤工具


        a).命令格式:  jstack   [option] vmid
        b).參數選項:-F:當正常輸出請求不被響應時,強制輸出線程堆棧。
                                                        -l :除堆棧外,顯示關於鎖的附加信息
                                                        -m:如果調用到本地方法的話,可以顯示c/c++的堆棧

 

    6.jinfo:java配置信息工具(JVM Configuration info)


        a).實時查看和調整虛擬機運行參數,之前的jps -v口令只能查看到顯示指定的參數,如果想要查看未被顯示指定的參數的值就要使用jinfo口令。
        b).命令格式: jinfo [option] pid
        c).選項:-flag :輸出指定args參數的值
                                        -flags:不需要args參數,輸出所以jvm參數的值
                                        -sysprops:輸出系統屬性,等同於System.getProperties()

    實現:這些命令行工具大多是jdk/lib/tools.jar類庫的包裝。主要代碼是早tool類庫中實現

二、調優分析內容
    
    1.運行日誌
    2.異常堆棧
    3.GC日誌
    4.線程快照(threaddump/javacore文件)、堆轉儲快照(heapdump/hprof文件)等。

 

 

獲取更多學習資料,面試題以及視頻,關注微信公衆號:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章