最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK自帶的四大命令行工具(jstat/jstack/jmap/jhat)的使用詳解

 更新時(shí)間:2026年06月05日 08:55:52   作者:碼不停蹄的玄黓  
jstat、jstack、jmap、jhat這四個(gè)是?JDK?自帶的線上問題排查核心工具,專門用于定位?Java?應(yīng)用的性能瓶頸、內(nèi)存泄漏、死鎖、CPU?飆高等問題,無需額外安裝,只要裝了?JDK?就能用,感興趣的小伙伴可以了解下

這四個(gè)是 JDK 自帶的線上問題排查核心工具,專門用于定位 Java 應(yīng)用的性能瓶頸、內(nèi)存泄漏、死鎖、CPU 飆高等問題,無需額外安裝,只要裝了 JDK 就能用。

我會用最實(shí)用、最常用的命令,直接告訴你:什么時(shí)候用、怎么用、看什么。

一、先準(zhǔn)備:獲取 Java 進(jìn)程 ID

所有工具第一步都需要進(jìn)程 ID(PID),先執(zhí)行:

jps -l

輸出示例:

12345 com.example.Application
67890 sun.tools.jps.Jps

12345 就是你的 Java 應(yīng)用 PID。

1. jstat:JVM 統(tǒng)計(jì)信息監(jiān)控工具(看性能、GC)

作用:查看類加載、內(nèi)存使用、GC 頻率/耗時(shí),排查 GC 頻繁、內(nèi)存占用高問題。

最常用命令

1)查看 GC 概況(最常用)

jstat -gc 12345 1000 10
  • 1000:每隔 1000ms(1秒)輸出一次
  • 10:總共輸出 10 次

關(guān)鍵字段

  • S0C/S1C:Survivor 區(qū)大小
  • E:Eden 區(qū)使用比例
  • O:老年代使用比例
  • YGC/YGT:Young GC 次數(shù)/耗時(shí)
  • FGC/FGT:Full GC 次數(shù)/耗時(shí)
  • GCT:GC 總耗時(shí)

排查技巧

  • FGC 快速上漲 ? 老年代內(nèi)存泄漏
  • YGC 每秒多次 ? 短生命周期對象過多

2)查看堆內(nèi)存使用百分比

jstat -gcutil 12345

2. jstack:堆棧跟蹤工具(看線程、死鎖、CPU 飆高)

作用:導(dǎo)出線程堆棧,排查死鎖、線程阻塞、CPU 100%、程序假死。

最常用命令

1)導(dǎo)出所有線程堆棧(保存到文件分析)

jstack 12345 > thread.log

2)直接排查死鎖(自動檢測)

jstack -l 12345

文件末尾會顯示:Found one Java-level deadlock

排查 CPU 飆高高階用法

找到 CPU 最高的線程 ID

top -H -p 12345

將線程 ID 轉(zhuǎn)成 16 進(jìn)制

printf "%x\n" 12345

在 jstack 日志中搜索該 16 進(jìn)制 ID,定位耗時(shí)代碼

3. jmap:內(nèi)存映像工具(導(dǎo)出堆、看對象)

作用:導(dǎo)出堆內(nèi)存快照(dump 文件),查看堆內(nèi)對象數(shù)量、大小,定位內(nèi)存泄漏。

最常用命令

1)導(dǎo)出堆快照(排查內(nèi)存泄漏必備)

jmap -dump:format=b,file=heap.hprof 12345
  • heap.hprof:二進(jìn)制堆文件,可導(dǎo)入工具分析
  • 注意:導(dǎo)出時(shí)會暫停 JVM,生產(chǎn)環(huán)境謹(jǐn)慎使用

2)查看堆中對象統(tǒng)計(jì)(數(shù)量+大?。?/p>

jmap -histo 12345 | head -20

輸出:序號、實(shí)例數(shù)、字節(jié)數(shù)、類名

能直接看到哪個(gè)類的對象最多,快速定位泄漏點(diǎn)。

3)查看 JVM 堆配置

jmap -heap 12345

查看新生代、老年代大小、垃圾回收器等信息。

4. jhat:堆快照分析工具(分析 hprof 文件)

作用:解析 jmap 導(dǎo)出的 hprof 堆快照,提供 Web 界面查看內(nèi)存對象。

注意:jhat 功能簡單,大型堆文件建議用 MAT(Eclipse Memory Analyzer),jhat 適合快速簡單分析。

使用命令

jhat -port 9999 heap.hprof
  • 啟動后訪問:http://localhost:9999
  • 頁面可查看:所有對象、引用關(guān)系、泄漏疑點(diǎn)

二、快速使用場景總結(jié)(直接背這個(gè))

工具核心用途最常用命令
jstat看 GC、內(nèi)存使用率、性能監(jiān)控jstat -gc PID 1000 10
jstack看線程、死鎖、CPU 飆高jstack -l PID > thread.log
jmap導(dǎo)出堆快照、看對象數(shù)量jmap -dump:file=heap.hprof PID
jhat分析堆快照(Web 界面)jhat -port 9999 heap.hprof

三、標(biāo)準(zhǔn)問題排查流程(實(shí)戰(zhàn))

  1. CPU 飆高topjstack → 定位耗時(shí)代碼
  2. 內(nèi)存飆升/泄漏jstat -gc 看 FGC → jmap 導(dǎo)出 dump → jhat/MAT 分析
  3. 程序卡死jstack 查死鎖、阻塞線程
  4. GC 頻繁jstat -gcutil 定位 GC 問題

總結(jié)

  1. jstat:監(jiān)控 GC 和內(nèi)存使用,不暫停應(yīng)用
  2. jstack:抓線程堆棧,查死鎖、CPU 高
  3. jmap:導(dǎo)出堆快照,查對象泄漏
  4. jhat:簡單分析堆快照(推薦用 MAT 替代)

這四個(gè)工具是 Java 線上問題排查的基礎(chǔ)必備技能,記住常用命令就能解決 80% 的 JVM 問題。

到此這篇關(guān)于JDK自帶的四大命令行工具(jstat/jstack/jmap/jhat)的使用詳解的文章就介紹到這了,更多相關(guān)JDK命令行工具使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java反射中java.beans包學(xué)習(xí)總結(jié)

    Java反射中java.beans包學(xué)習(xí)總結(jié)

    本篇文章通過學(xué)習(xí)Java反射中java.beans包,吧知識點(diǎn)做了總結(jié),并把相關(guān)內(nèi)容做了關(guān)聯(lián),對此有需要的朋友可以學(xué)習(xí)參考下。
    2018-02-02
  • SpringBoot結(jié)合prometheus自定義埋點(diǎn)方式

    SpringBoot結(jié)合prometheus自定義埋點(diǎn)方式

    文章介紹了如何使用Spring Actuator、Prometheus和Grafana進(jìn)行度量統(tǒng)計(jì)收集、數(shù)據(jù)收集和數(shù)據(jù)展示,以監(jiān)控生成環(huán)境機(jī)器的性能指標(biāo)和業(yè)務(wù)數(shù)據(jù)指標(biāo)
    2024-12-12
  • 詳解Java中的泛型

    詳解Java中的泛型

    這篇文章主要介紹了Java中的泛型,當(dāng)我們不確定數(shù)據(jù)類型時(shí),我們可以暫時(shí)使用一個(gè)字母 T代替數(shù)據(jù)類型,例如寫一個(gè)方法,但是我們不知道它是傳遞的是什么數(shù)據(jù)類型,我們就可以使用泛型,到時(shí)候只要指明T是什么數(shù)據(jù)類型,就可以使用了,需要的朋友可以參考下
    2023-05-05
  • shiro整合springmvc配置靜態(tài)資源過濾方式

    shiro整合springmvc配置靜態(tài)資源過濾方式

    文章介紹了在Spring Boot + Spring MVC + Shiro + JSP項(xiàng)目中,如何正確配置靜態(tài)資源路徑以避免在引入Shiro過濾器后資源加載失敗的問題
    2026-03-03
  • Java 8新增的方法參數(shù)反射實(shí)例分析

    Java 8新增的方法參數(shù)反射實(shí)例分析

    這篇文章主要介紹了Java 8新增的方法參數(shù)反射,結(jié)合實(shí)例形式分析了java8新增api方法參數(shù)反射相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Java獲取Class對象的幾種方式小結(jié)

    Java獲取Class對象的幾種方式小結(jié)

    本文給大家分享了Java獲取Class對象的幾種方式,使用類名.class 語法,使用對象的 getClass()方法,使用 Class.forName()方法等多種方法,不同的方式適用于不同的場景,需要的朋友可以參考下
    2023-10-10
  • synchronized背后的monitor鎖實(shí)現(xiàn)詳解

    synchronized背后的monitor鎖實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了synchronized背后的monitor鎖實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • springmvc注解配置實(shí)現(xiàn)解析

    springmvc注解配置實(shí)現(xiàn)解析

    這篇文章主要介紹了springmvc注解配置實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java中的CopyOnWriteArrayList容器解析

    Java中的CopyOnWriteArrayList容器解析

    這篇文章主要介紹了Java中的CopyOnWriteArrayList容器解析,CopyOnWriteArrayList容器允許并發(fā)讀,讀操作是無鎖的,性能較高。至于寫操作,比如向容器中添加一個(gè)元素,則首先將當(dāng)前容器復(fù)制一份,然后在新副本上執(zhí)行寫操作,需要的朋友可以參考下
    2023-12-12
  • Java遞歸調(diào)用如何實(shí)現(xiàn)數(shù)字的逆序輸出方式

    Java遞歸調(diào)用如何實(shí)現(xiàn)數(shù)字的逆序輸出方式

    這篇文章主要介紹了Java遞歸調(diào)用如何實(shí)現(xiàn)數(shù)字的逆序輸出方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

新干县| 朔州市| 郸城县| 鄂尔多斯市| 海丰县| 巴青县| 朝阳区| 祥云县| 彭泽县| 宁德市| 大新县| 河间市| 库伦旗| 同德县| 普安县| 丹凤县| 阳西县| 南岸区| 揭东县| 大连市| 安龙县| 无锡市| 怀安县| 武定县| 儋州市| 佛教| 崇左市| 北碚区| 阳谷县| 海城市| 民乐县| 石泉县| 永修县| 新巴尔虎右旗| 洛扎县| 宁乡县| 涞水县| 曲水县| 临城县| 晋宁县| 中西区|