1. 程式人生 > >JVM系列-04-JDK自帶的管理分析工具

JVM系列-04-JDK自帶的管理分析工具

宣告

本篇文章是本人閱讀《深入理解JVM》和《java虛擬機器規範》時的筆記。
記錄的都是一些概念性的東西。
JVM是HotSpot,jdk1.7。
大神繞路,不喜勿噴。

1 概覽

對於java程式設計師來說,javajavacjavadoc…… ,這些命令都能熟練地使用。
除了這些命令,在$JAVA_HOME/bin目錄下還有一些非常常用的命令。

在本人機器上,該目錄下的內容如下:

$ pwd
/c/Program Files/Java/jdk1.8.0_101/bin
$ ls
appletviewer.exe*  javadoc.exe*         jcmd.exe*      jmap.exe
* jstatd.exe* orbd.exe* servertool.exe* extcheck.exe* javafxpackager.exe* jconsole.exe* jmc.exe* jvisualvm.exe* pack200.exe* sigar-amd64-winnt.dll* idlj.exe* javah.exe* jdb.exe* jmc.ini keytool.exe* policytool.exe* sigar-x86-winnt.dll
* jabswitch.exe* javap.exe* jdeps.exe* jps.exe* kinit.exe* rmic.exe* tnameserv.exe* jar.exe* javapackager.exe* jhat.exe* jrunscript.exe* klist.exe* rmid.exe* unpack200.exe* jarsigner.exe* java-rmi.exe* jinfo.exe* jsadebugd.exe
* ktab.exe* rmiregistry.exe* wsgen.exe* java.exe* javaw.exe* jjs.exe* jstack.exe* msvcr100.dll* schemagen.exe* wsimport.exe* javac.exe* javaws.exe* jli.dll* jstat.exe* native2ascii.exe* serialver.exe* xjc.exe*

2 命令列工具

2.1 jps

喜歡linux的使用者一定用過一個命令就是ps,為 Process Snapshot的縮寫,也就是程序快照。
此處的jps也就是 “Java Process Snapshot”(java程序快照)的縮寫了。

語法:

C:\Users\hylexus>jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]

選項:

  • q : 只顯示LVMID(Local Virtual Machine Identifier)而忽略主類名
  • m : 程序啟動時傳遞給入口函式(main)的引數
  • l : 輸出全類名或者jar包路徑
  • v : 程序啟動時傳遞的JVM引數

2.2 jstat

語法

C:\Users\hylexus>jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      要查詢的屬性或VM特性
                    -class 監視類裝載、解除安裝數量、總空間以及類裝載耗費的時間
                    -gc 監視Java的堆。比如Eden、survivor等
                    -gccapacity 和gc類似,但是主要關注點是堆中各個區域的容量
                    -gcutil 和gc類似,但是主要關注點是各個區域已使用部分佔總容量的百分比
                    -gccause 和gcutil類似,但是會同時輸出導致上一次GC的原因
                    -gcnew 監視新生代GC狀況
                    -gcnewcapacity ………………(容量)
                    -gcold ………………(老年代)
                    -gcoldcapacity ………………(容量)
                    -compiler JIT編譯器編譯過的方法、耗時等資訊
                    -printcompilation 被JIT編譯器編譯過的方法
  <vmid>        VMID/LVMID:
                    在本地環境VMID和LVMID是一致的
                    遠端環境中VMID應該是:
                        <lvmid>[@<hostname>[:<port>]]
  <lines>       Number of samples between header lines.
  <interval>    重新整理時間間隔:
                    <n>["ms"|"s"],預設單位為毫秒。
  <count>       總共查詢多少次.
  -J<flag>      Pass <flag> directly to the runtime system.

示例:

jstat -gcutil 67008 5s 3
檢視pid為67008的程序的堆記憶體各個區域佔用總容量百分比,
5秒重新整理一次,共查詢3

執行結果如下:

C:\Users\hylexus>jstat -gcutil 67008 5s 3
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00  83.42   0.38  48.24  89.79  78.31     31    0.578     5    1.067    1.645
  0.00  83.42   0.38  48.24  89.79  78.31     31    0.578     5    1.067    1.645
  0.00  83.42   0.38  48.24  89.79  78.31     31    0.578     5    1.067    1.645

說明:

  • S0: Survivor0(新生代Survivor)是空的
  • S1: Survivor1(新生代Survivor)是空的
  • E: Eden(新生代Eden)佔用0.38%
  • O: Old(老年代)佔用48.24%
  • M:
  • CCS:
  • YGC: Young GC==> Minor GC ==> 新生代GC的次數
  • YGCT: YGC 耗時0.578秒
  • FGC: Full GC==>老年代GC的次數
  • FGCT: FGC總耗時1.067秒
  • GCT: 所有GC總耗時1.645秒

2.3 jinfo

jinfo可以檢視和調整虛擬機器各項引數。

語法

C:\Users\hylexus>jinfo -help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [[email protected]]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         列印指定引數值
    -flag [+|-]<name>    啟用(+)或禁用(-)指定引數
    -flag <name>=<value> 設定指定引數的值
    -flags               列印JVM引數
    -sysprops            相當於System.getProperites()
    <no option>          表示不帶任何選項,將打印出以上所提到的所有屬性

示例

打印出pid為67008的程序的JVM引數
C:\Users\hylexus>jinfo -flags 67008
Attaching to process ID 67008, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=3 -XX:InitialHeapSize=41943040 -XX:MaxHeapSize=1258291200 -XX:MaxNewSize=419430400 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=13631488 -XX:OldSize=28311552 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -Dosgi.requiredJavaVersion=1.8 -Xms40m -Xverify:none -Dorg.eclipse.swt.browser.IEVersion=10001 -Xmx1200m
查詢pid為67008的程序的初始堆大小
C:\Users\hylexus>jinfo -flag InitialHeapSize 67008
-XX:InitialHeapSize=41943040

2.4 jmap

jmap(Memory map)可以生成堆轉儲快照(一般稱為heapdump或dump檔案)

語法

C:\Users\hylexus>jmap -help
Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [[email protected]]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               不帶選項,打印出和Solaris下的pmap一樣的資訊
    -heap                打印出堆的詳細情況
                            如垃圾收集器組合、分帶情況等
                            只在Linux下有效
    -histo[:live]        堆中物件資訊統計。如類例項數量等。
                            live,只統計活著的物件資訊
    -clstats             類載入器資訊
    -finalizerinfo       打印出在F-Queue佇列中等待執行finalizer()方法的物件資訊
    -dump:<dump-options> 堆轉儲快照
                         dump-options:
                           live         只是dump出存活著的物件
                           format=b     binary format
                           file=<file>  可選,dump到哪個檔案中
                         示例: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   當JVM對-dump選項沒有響應時可以是使用-F來強制dump
                            只在Linux/Solaris下有效

示例

jmap -heap 67008
jmap -finalizerinfo 67008
jmap -dump:live,format=b,file=t.bin 67008

2.5 jhat

jhat(JVM Heap Analysis Tool)是虛擬機器堆轉儲快照分析工具。一般是用來分析用jmap生成的堆快照資訊。

但是他的分析結果不太美觀,不是非常容易讀懂。
他會啟動一個內建的http伺服器來將分析結果展現為html格式。

示例

生成快照
C:\Users\hylexus>jmap -dump:live,format=b,file=t.bin 67008
Dumping heap to C:\Users\hylexus\t.bin ...
Heap dump file created

C:\Users\hylexus>
# 分析快照
C:\Users\hylexus>jhat t.bin
Reading from t.bin...
Dump file created Mon Dec 19 22:43:48 CST 2016
Snapshot read, resolving...
Resolving 1861041 objects...
Chasing references, expect 372 dots....................................................................................................................................................................................................................................................................................................................................................................................
Eliminating duplicate references....................................................................................................................................................................................................................................................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

此時在瀏覽器裡訪問 127.0.0.1:7000就能看到分析結果:

jhat分析結果

2.6 jstack

jstack(Stack Trace for Java)可以生成虛擬機器當前時刻的執行緒快照。
一般稱為threaddump或者javacore檔案。即每一條執行緒正在執行的方法堆疊的集合。

語法

C:\Users\hylexus>jstack -help
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [[email protected]]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  當JVM不響應該請求時強制進行執行緒dump
    -m  顯示java方法也可以是本地方法的堆疊資訊
    -l  顯示有關鎖的附加資訊

3 圖形化工具

對於這兩個視覺化工具的使用就不在多說什麼了。
點滑鼠誰都會。

3.1 jconsole

jconsole

3.2 jvisualvm

jvisualvm

參考文章

  • 《深入理解JVM》
  • 《Java虛擬機器規範》-JDK1.7

相關推薦

JVM系列-04-JDK管理分析工具

宣告 本篇文章是本人閱讀《深入理解JVM》和《java虛擬機器規範》時的筆記。 記錄的都是一些概念性的東西。 JVM是HotSpot,jdk1.7。 大神繞路,不喜勿噴。 1 概覽 對於java程式設計師來說,java、javac、ja

死鎖排查的小竅門 --使用jdk管理工具jstack

pre ble new deadlock 一段 指令 tro bject print 本文版權歸 遠方的風lyh和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。 開發時間久了,難免會寫出一些一些死鎖的代碼,自己明明調用該方法可該方法就是不執行、不進該

JVM效能分析工具介紹——jstack

轉載: https://blog.csdn.net/Roy_70/article/details/78021551 前言 JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、h

jvm(四)——JVM記憶體分析工具詳解

在進行java程式問題定位時,記憶體問題定位是很關鍵的一招。jvm自帶的命令可以方便的在生產監控和列印堆疊的日誌資訊幫忙我們來定位問題!雖然jvm調優成熟的工具已經有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,

JVM-JDK命令列工具

JDK自帶命令列工具 1. jps-檢視Java程序 jps命令相當於Linux下的ps命令,只不過它只列出Java程序。 jps :列出Java程式程序ID和Main函式名稱 jp

JVM效能分析工具介紹——jstat

前言 JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點,使用者可以根據你需要檢測的應用或者程式片段的

使用JDK的keytool工具生成證書

tro key 1.4 加密 域名 證書生成 官方文檔 非對稱 strong 一、keytool 簡介   keytool 是java用於管理密鑰和證書的工具,它使用戶能夠管理自己的公鑰/私鑰對及相關證書,用於(通過數字簽名)自我認證(用戶向別的用戶/服務認證自己)或數據

利用jdk的強悍工具jvisualvm檢測多執行緒的競爭

http://blog.csdn.net/zhuyijian135757/article/details/38384579 1。啟動 在命令列輸入jvisualvm。如果jdk安裝正確的話(6.x以上版本),就會看到如下的一個視窗: 看起來相當簡潔,不像是很強

JDKjvisualvm監控工具

img 遠程 運行 工具 font 本地 -s tomcat art 定位 工具位於jdk\bin目錄下(雙擊運行): 可以本地或者遠程調試,本地調試會自動加載,遠程調試需要配置。下面以Tomcat為例。 概述 監視 線程 抽樣器

JDK記憶體及執行緒分析工具小記

查詢、監控、分析Java應用程式的時候,我們關注的點主要集中在資源利用,比如CPU,記憶體,IO,執行緒等。其中記憶體以及執行緒的分析尤為常見。記憶體,是否有記憶體洩漏,各個區塊記憶體分配是否大小合適。執行緒,數目是否合理,有沒有死鎖,執行狀態如何。 jps -vl jps是JDK提

使用JDK的VisualVM進行Java程式的效能分析

VisualVM是什麼? VisualVM是JDK自帶的一個用於Java程式效能分析的工具,JDK安裝完畢後就有啦,在JDK安裝目錄的bin資料夾下能找到名稱為jvisualvm.exe。 要使用VisualVM分析您的應用效能,首先得讓Visual

jdk的執行緒池框架ThreadPoolExcutor原始碼分析

一、前言   JUC這部分還有執行緒池這一塊沒有分析,需要抓緊時間分析,下面開始ThreadPoolExecutor,其是執行緒池的基礎,分析完了這個類會簡化之後的分析,執行緒池可以解決兩個不同問題:由於減少了每個任務呼叫的開銷,它們通常可以在執行大量非同步任務

JDK的運行監控工具JConsole觀察分析Java程序的運行

alt nbsp 類裝載 什麽 spl for 監控工具 計算機 reat 原文地址:https://blog.csdn.net/libaolin198706231987/article/details/55057149 一、JConsole是什麽 從Java

Java程式記憶體分析jdk的jmap能為我們帶來什麼

jmap 打印出某個java程序(使用pid)記憶體內的,所有‘物件’的情況(如:產生那些物件,及其數量)。 可以輸出所有記憶體中物件的工具,甚至可以將VM 中的heap,以二進位制輸出成文字。使用方法 jmap -histo pid。如果連用SHELL jmap -histo pid&g

使用JDK的JConsole性能調優

post catalina maxperm max 分享圖片 前行 性能調優 保存 style 找到你安裝的JDK運行此exe文件 如圖所示你會看到此界面 接下來運行你的tomcat但是再次之前我們需要加點東西 如圖中找到bin目錄下的catalin

JDK的jvisualvm安裝Visual GC插件

plugins 點擊下載 png 鏈接 cmd pan 自帶 ron 點擊 1.打開cmd,輸入jvisualvm,回車; 2.點擊工具——>插件; 3.訪問網址:https://visualvm.github.io/pluginscenters.html,找到

利用JDK的keytool生成SSL證書然後導入到SpringBoot

生成 密鑰 clas alias 自帶 就會 輸入 http -type 一:生成命令如下(這一步生成的暫不知道幹嘛用的) E:\Desktop\Documents\證書>keytool -genkey -alias tomcat -keypass 123456

使用jdk的visualVM監控遠程監控was

tps root fin 監控 sina xmx nag 結束進程 requested 1.登錄was控制臺https://172.16.87.221:9043/ibm/console/unsecureLogon.jsp服務器--服務器類型--Java 和進程管理---

任務排程(一)——jdk的Timer

  https://blog.csdn.net/xiaoxian8023/article/details/45569441     說到任務排程,大家可能會想到Quartz框架,但是jdk自帶的簡單任務排程工具類,反而瞭解的人並不是很多。我覺得如果你的業

jdk的JVisualVM的視覺化監控

如果你前面看了我幾篇關於jvm效能優化的文章,命令列操作是不是不直觀,那麼我們來使用這個JVisualVM吧,在jdk的bin資料夾裡,這個官方文件都有中文版,外掛啥的自己看著安裝。https://visualvm.github.io/pluginscenters.html 他主要有如下的功