利用JDK自帶工具分析JVM使用情況

JDK 1.7+(jcmd命令從JDK 1.7以后支持)

JVM進程的pid(Linux環境可以通過ps -ef獲取)

必須進入指定jdk的bin目錄下包含jps、jstat等等,然后再輸命令,否則命令無效

https://www.cnblogs.com/ostenant/p/9696226.html

1. jcmd命令介紹 --- 顯示進程內存信息

1.1 查看進程

? ? ?命令:jcmd -l

? ? ?作用:查看環境上所有JVM進程的信息(云化環境JVM進程較多,建議直接使用ps -ef | grep "微服務名稱"查詢比較方便)

1.2 列出當前JVM進程支持的命令(最最最實用的命令)

? ? 命令:jcmd?pid?help

? ? 作用:列出當前運行的 java 進程可以執行的操作

1.3 打印堆內存

? ? 命令:jcmd?pid?GC.heap_dump?dump.bin(云化環境打印在微服務的根目錄下)

? ? 作用:打印堆內存到文件

1.4 打印堆棧信息

? ? 方法一:歐拉操作系統,使用ossuser執行 kill -3?pid。堆棧信息打印在各服務tomcat的catalina.out文件中。

? ? 致謝:多謝超哥00267207提供方法及輸出文件路徑。

? ? 方法二:命令:jcmd?pid?Thread.print (內容較多,建議輸出到文件, jcmd?pid?Thread.print > thread.log)

? ? 作用:打印堆棧信息

更多細節:http://www.lxweimin.com/p/388e35d8a09b

2.jstat命令介紹 --- 顯示垃圾回收信息

jstat是用于識別虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程虛擬機進程中的類裝載內存垃圾收集、jit編譯等運行數據,它是線上定位jvm性能的首選工具。

jstat工具提供如下的jvm監控功能:

1)類的加載卸載的情況;

2)查看新生代老生代元空間(MetaSpace)的容量及使用情況;

3)查看新生代老生代元空間(MetaSpace)的垃圾回收情況,包括垃圾回收的次數,垃圾回收所占用的時間

4)查看新生代中Eden區及Survior區中容量分配情況等。

2.1 查看gc信息

命令:jstat -gc pid

?作用:顯示gc的信息,查看gc的次數,及時間

? ? ? ? ? ? ? S0C:第一個幸存區的大小

? ? ? ? ? ? ??S1C:第二個幸存區的大小

? ? ? ? ? ? ??S0U:第一個幸存區的使用大小

? ? ? ? ? ? ??S1U:第二個幸存區的使用大小

? ? ? ? ? ? ??EC:伊甸園區的大小

? ? ? ? ? ? ??EU:伊甸園區的使用大小

? ? ? ? ? ? ??OC:老年代大小

? ? ? ? ? ? ??OU:老年代使用大小

? ? ? ? ? ? ??MC:方法區大小

? ? ? ? ? ? ??MU:方法區使用大小

? ? ? ? ? ? ??CCSC:壓縮類空間大小

? ? ? ? ? ? ??CCSU:壓縮類空間使用大小

? ? ? ? ? ? ??YGC:從應用程序啟動到采樣時young gc的次數

? ? ? ? ? ? ??YGCT:從應用程序啟動到采樣時young gc的所用的時間(s)

? ? ? ? ? ? ??FGC:從應用程序啟動到采樣時full?gc的次數

? ? ? ? ? ? ??FGCT:從應用程序啟動到采樣時full?gc的所用的時間(s)

? ? ? ? ? ? ? GCT:?從應用程序啟動到采樣時整個gc所用的時間

./jstat -gc 426 1000 10

每隔1秒更新出最新的一行jstat統計信息,一共執行10次jstat統計。

通過這個命令,可以非常靈活的對線上機器通過固定頻率輸出統計信息,觀察每隔一段時間的JVM中的Eden區對象占用變化。比如執行完這個命令之后,第一秒先顯示出Eden區使用了200MB內存,第二秒顯示出來Eden區使用了205MB內存,第三秒顯示Eden區使用了209MB內存,以此推出這個系統大概每秒新增5MB左右的對象。

2.2 gc信息統計

? ? 命令:jstat -gcutil?pid

? ? 作用:獲取gc的統計數據

? ? ? ? ? ? ? S0:幸存1區當前使用比例

? ? ? ? ? ? ??S1:幸存2區當前使用比例

? ? ? ? ? ? ??E:伊甸園區使用比例

? ? ? ? ? ? ??O:老年代使用比例

? ? ? ? ? ? ??M:元數據區使用比例

? ? ? ? ? ? ??CCS:壓縮使用比例

? ? ? ? ? ? ??YGC:年輕代垃圾回收次數

? ? ? ? ? ? ??FGC:老年代垃圾回收次數

? ? ? ? ? ? ??FGCT:老年代垃圾回收消耗時間

? ? ? ? ? ? ??GCT:垃圾回收消耗總時間

實操:jstat -gcutil?pid?3s (每3s打印一次gcutil)

表示監控進程11900的GC情況,每3秒輸出一條記錄,從這里可以看到O列一直100%,FGC列一直增長。這種場景表示FullGC后,堆內存一直沒法釋放。一旦出現這種情況,基本上十有八九就是內存泄漏。?

要點:O列(老生代內存使用率)一直接近100%,FGC列(FullGC次數)一直增長

致謝:多謝超哥?00267207提供實際案例。

更多細節:

https://apppukyptrl1086.pc.xiaoe-tech.com/detail/i_5d11e6b3c5c6a_K6Xk3Bs1/1

https://blog.csdn.net/zhaozheng7758/article/details/8623549

3:jps使用? ---主要查看進程JVM配置信息

jps是用于查看有權訪問的hotspot虛擬機的進程。當未指定hostid時,默認查看本機jvm進程,否則查看指定的hostid機器上的jvm進程,此時hostid所指機器必須開啟jstatd服務。

jps可以列出jvm進程lvmid,主類類名,main函數參數,jvm參數,jar名稱等信息。

?命令:./jsp -l ---輸出進程號,jar包

?命令:./jps -v ---輸出進程啟動時jvm參數配置

?命令:./jps -m ---輸出進程啟動依賴的配置參數

更多細節:https://blog.csdn.net/wo541075754/article/details/55095443

4:jinfo? --查看和調整jvm各項參數

jinfo(JVM Configuration info)這個命令作用是實時查看和調整?虛擬機運行參數。之前的?jps -v?命令只能查看到顯示?指定的參數,如果想要查看?未顯示?的參數的值就要使用?jinfo?命令。

jinfo [option] pid

選項

option具體選項及作用如下:

-flags 查看jvm的參數

-sysprops 查看java系統參數

-flag [+|-] 修改正在運行的Java應用程序JVM參數,其中+是開啟對應參數,-是關閉對應參數


命令:./jinfo 655


命令:./jinfo -flags 655? ? 查看jvm參數


命令:./jinfo -flag? <name>? pid

命令:./jinfo -flag < name > = < value >? ? ? 修改指定name的jvm參數值

[root@izbp1chtb8a3vd2mzvuawlz ~]# jinfo -flag CMSAbortablePrecleanWaitMillis 4306? ?

-XX:CMSAbortablePrecleanWaitMillis=100

[root@izbp1chtb8a3vd2mzvuawlz ~]# jinfo -flag CMSAbortablePrecleanWaitMillis=50 4306

[root@izbp1chtb8a3vd2mzvuawlz ~]# jinfo -flag CMSAbortablePrecleanWaitMillis 4306?

-XX:CMSAbortablePrecleanWaitMillis=50

?查看可修改的JVM參數:

命令:java -XX:+PrintFlagsInitial | grep manageable

命令:./jinfo -flag [+|-]? ? ?關閉PrintGCDetails參數

更多細節:https://blog.csdn.net/qq2430/article/details/82154442

5.jmap --- 內存映射工具

jmap(JVM Memory Map) 命令用來查看堆內存使用狀況,一般結合jhat使用,用于生成heap dump文件。jmap不僅能生成dump文件,還可以查詢finalize執行隊列、Java元空間metaspace的詳細信息,如當前使用率、當前使用的是哪種收集器等等。

如果不使用這個命令,還可以使用-XX:+HeapDumpOnOutOfMemoryError參數來讓虛擬機出現OOM的時候,自動生成dump文件。

命令:./jmap -dump:format=b,file=./gate.dump 9625

dump用于導出內存轉儲快照。常用的方式是通過jmap把進程內存使用情況dump到文件中,再用jhat分析查看。jmap進行dump的命令格式如jmap -dump:format=b,file=dumpFileName,導出的?dump?文件可以通過?MAT、VisualVM?和?jhat?等工具查看分析:

命令:./jmap -finalizerinfo 9625

命令:./jmap -heap 9625

顯示??中的摘要信息。包括?堆內存?的使用情況,正在使用的?GC?算法堆配置參數?和?各代中堆內存?使用情況。可以用此來判斷內存目前的?使用情況?以及?垃圾回收?情況。

命令:./jmap -histo 9625

打印堆的?對象統計,包括?對象實例數內存大小?等等。因為在?histo:live?前會進行?full gc,如果帶上?live?則只統計?活對象。不加?live?的堆大小要大于加?live?堆的大小。

更多細節:https://blog.csdn.net/zhaozheng7758/article/details/8623530

6.jstack --- 進程中的堆棧跟蹤

jstack用于生成java虛擬機當前時刻的線程快照線程快照是當前java虛擬機內每一條線程正在執行的方法堆棧集合。生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖死循環請求外部資源導致的長時間等待等等。

線程出現停頓的時候,通過jstack來查看各個線程調用堆棧,就可以知道沒有響應的線程到底在后臺做什么事情,或者等待什么資源。如果java程序崩潰生成core文件,jstack工具可以通過core文件獲取java stack和native stack的信息,從而定位程序崩潰的原因。

命令:./jstack -F 9625? ? --強制輸出線程堆棧

命令:./jstack -l? 655 --顯示堆棧和鎖

命令:./jstack -m 9625? --可以顯示本地c++堆棧

更多細節:https://blog.csdn.net/zhaozheng7758/article/details/8623535

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372