【Java基礎】- JVM之Dump文件詳解

Java基礎 - JVM之Dump文件詳解

文章目錄

  • Java基礎 - JVM之Dump文件詳解
    • 一、什么是Dump
    • 三、為什么需要Dump
      • 分析思路
    • 四、Dump記錄哪些內容
      • 4.1 Java dump 文件的格式和內容
        • 段格式
        • 行格式
      • 4.2 常用分類heap dump和thread dump
        • heap dump
        • thread dump
    • 五、如何生產Dump文件
        • 5.1 獲取heap dump文件
        • 5.2 獲取heap dump文件
        • 5.3 如果我們只需要將dump中存活的對象導出,那么可以使用:live參數
        • 5.4 自動生成dump文件
    • 六、Dump文件查看工具
      • JDK命令
        • jconsole 監控界面
      • jvisualvm
        • 阿里檢測命令工具Arthas
        • Eclipse內存分析工具MAT(MemoryAnalyzerTool)
        • Jprofiler
    • 七、總結

學習Jvm調優,我們會接觸到Dump文件。什么是Dump文件、Dump文件是如何得到的。當程序崩潰時,如何從Dump文件還原崩潰時的信息。本文講重點講解。

一、什么是Dump

Thread Dump是非常有用的診斷Java應用問題的工具。每一個Java虛擬機都有及時生成所有線程在某一個點狀態的thread-dump的能力,雖然各個Java虛擬機打印的thread dump稍有不同,但是大部分提供了當前活動線程的快照及JVM中所有Java線程的堆棧跟蹤信息,堆棧信息一般包含完整的類名及所執行的方法,如果可能還有源碼的行數。

三、為什么需要Dump

服務器CPU,內存占用空間飆升,或者GC頻繁,首先需要排除的就是內存泄露,即內存中沒有的對象的空間沒有被及時回收導致的。而檢測內存泄露就需要看哪種類在內存占了較多份額,從而定位到代碼,然后修改。

分析思路

  1. CPU、MEM飆升,確定是否WEB服務的問題并記錄PID
  2. 查看GC情況,如果每次GC效果不明顯說明內存泄露
  3. 導出Dump并分析,定位占用top n的類
  4. 分析并找到 哪里創建的類占用了大量

四、Dump記錄哪些內容

4.1 Java dump 文件的格式和內容

Java dump通常的文本格式(.txt), 因此可用通過一般的文本編輯器進行閱讀,閱讀時需要注意段與行的格式:

五、如何生產Dump文件

使用的JDK工具在JDK_HOME/bin/目錄下,使用到jmap和jstack這兩個命令。

5.1 獲取heap dump文件

windows下切換到JDK_HOME/bin/,執行以下命令:jmap -dump:format=b,file=heap.hprof 2576

linux下切換到JDK_HOME/bin/,執行以下命令:./jmap -dump:format=b,file=heap.hprof 2576

這樣就會在當前目錄下生成heap.hprof文件,這就是heap dump文件。

5.2 獲取heap dump文件

windows下執行:jstack 2576 > thread.txt

inux下執行:./jstack 2576 > thread.txt

windows/linux則會將命令執行結果轉儲到thread.txt,這就是thread dump文件。有了dump文件后,我們就能借助性能分析工具獲取dump文件中的信息。

5.3 如果我們只需要將dump中存活的對象導出,那么可以使用:live參數

jmap -dump:live,format=b,file=heapLive.hprof 2576

5.4 自動生成dump文件

  • -XX:+HeapDumpOnOutOfMemoryError

    當OutOfMemoryError發生時自動生成 Heap Dump 文件。這是一個非常有用的參數,因為當你需要分析Java內存使用情況時,往往是在OOM(OutOfMemoryError)發生時。

  • -XX:+HeapDumpBeforeFullGC

    當 JVM 執行 FullGC 前執行 dump

  • -XX:+HeapDumpAfterFullGC

    當 JVM 執行 FullGC 后執行 dump。

  • -XX:+HeapDumpOnCtrlBreak

    交互式獲取dump。在控制臺按下快捷鍵Ctrl + Break時,JVM就會轉存一下堆快照。

  • -XX:HeapDumpPath=d:\dump.hprof

    指定 dump 文件存儲路徑。注意:JVM 生成 Heap Dump 的時候,虛擬機是暫停一切服務的。如果是線上系統執行 Heap Dump 時需要注意。

六、Dump文件查看工具

定位排查問題時最為常?命令包括:jps(進程)、jmap(內存)、jstack(線程)、jinfo(參數)等。

  • jps:查詢當前機器所有Java進程信息
  • jmap:輸出某個 Java 進程內存情況
  • jstack:打印某個 Java 線程的線程棧信息
  • jinfo:用于查看jvm

JDK命令

七、總結

如果某種類型的對象太多,那么有可能是引用它的那個類的對象太多;基本上一些簡單頁面的查詢,結合原代碼,就可以初步定位內存泄漏的地方;綜上,dump文件結構還是比較簡單的,這對于分析線程的執行情況非常有用,也是每一個Java程序員必須掌握的高級技能之一;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35288.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch之kibana相關命令

1.中文分詞器相關命令 2.拼音分詞器相關命令

服務器之LNMP

lnmp的構成 L:linux系統,操作系統。 N:nginx網站服務,前端,提供前端的靜態頁面服務。同時具有代理,轉發的作用。 轉發:主要是轉發后端請求。轉發到PHP。nginx沒有處理動態資源的功能,他有可以支持轉發動態請求的模塊。 M&…

正則表達式練習

正則表達式練習 工具目的代碼運行結果 工具 pycharm 目的 https://www.77xsw.cc/fenlei/1_1/:第一頁的網址 https://www.77xsw.cc/fenlei/1_2/:第二頁的網址 ... https://www.77xsw.cc/fenlei/1_10/:第十頁的網址 代碼 import requests im…

REDIS主從配置

目錄 前言 一、概述 二、作用 三、缺點 四、redis主從復制的流程 五、搭建redis主從復制 總結 前言 Redis的主從配置是指在Redis集群中,將一個Redis節點配置為主節點(master),其他節點配置為從節點(slave)…

【數據結構?堆】堆排序(理論基礎)

堆的定義  ? 堆是一個完全二叉樹   –所有葉子在同一層或者兩個連續層   –最后一層的結點占據盡量左的位置  ? 堆性質   –為空, 或者最小元素在根上   –兩棵子樹也是堆 存儲方式  ? 最小堆的元素保存在heap[1..hs]內   – 根在heap[1]   –K的左兒子是2k,…

細胞——求細胞數量 C++詳解

細胞——求細胞數量 C詳解 求細胞數量題目描述輸入格式輸出格式樣例樣例輸入樣例輸出 提示數據規模與約定 解法代碼 求細胞數量 題目描述 一矩形陣列由數字 0 0 0 到 9 9 9 組成,數字 1 1 1 到 9 9 9 代表細胞,細胞的定義為沿細胞數字上下左右若還…

vue3中使用component動態組件常見問題

一. 在vue3中使用動態組件問題警告處理 1. 代碼如下 <template><div v-for"(item, index) in navItems" :key"index"><component :is"item.component" :key"item.gameId"></component></div> </te…

nbcio-boot升級springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json問題

升級后&#xff0c;運行顯示項目的時候出現下面錯誤 2023-08-12 10:57:39.174 [http-nio-8080-exec-3] [1;31mERROR[0;39m [36morg.jeecg.common.aspect.DictAspect:104[0;39m - json解析失敗Java 8 date/time type java.time.LocalDateTime not supported by default: add Mo…

Leetcode-每日一題【劍指 Offer 26. 樹的子結構】

題目 輸入兩棵二叉樹A和B&#xff0c;判斷B是不是A的子結構。(約定空樹不是任意一個樹的子結構) B是A的子結構&#xff0c; 即 A中有出現和B相同的結構和節點值。 例如: 給定的樹 A: 3 / \ 4 5 / \ 1 2 給定的樹 B&#xff1a; 4 / 1 返回 true&#xff0…

ffmpeg ts列表合并為mp4

操作系統&#xff1a;ubuntu 注意事項&#xff1a; 1.ts文件順序必須正確&#xff0c;也就是下一幀的dst和pst要比上一幀的大&#xff0c;否則會報錯 2.codecpar->codec_tag要設置為0&#xff0c;否則報錯Tag [27][0][0][0] incompatible with output codec id ‘27’ (avc1…

docker版jxTMS使用指南:使用jxTMS采集數據之二

本文是如何用jxTMS進行數據采集的第二部分&#xff0c;整個系列的文章請查看&#xff1a;docker版jxTMS使用指南&#xff1a;4.4版升級內容 docker版本的使用&#xff0c;請查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的說明&#xff0c;請查看&#xff1a;4.0版升級內…

Vue + MapBox快速搭建

一、說明&#xff1a; 1.mapbox-gl自2.0版本開始不再開源&#xff0c;需要用戶在官網申請key使用。 2.maplibre GL JS是一個開源庫&#xff0c;它起源于 mapbox-gl-js 的開源分支。該庫的初始版本&#xff08;1.x&#xff09;旨在替代Mapbox的OSS版本。簡單來說maplibre是mapb…

異步場景加載詳解

異步場景加載詳解 介紹 異步場景加載是一種在Unity中加載場景的方式&#xff0c;它允許在加載過程中執行其他操作&#xff0c;并提供了加載進度的反饋。通過異步加載&#xff0c;可以避免加載大型場景時的卡頓現象&#xff0c;提高游戲的流暢性和用戶體驗。 方法 在Unity中…

C++——缺省參數

缺省參數的定義 缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數的時候&#xff0c;如果沒有指定實參&#xff0c;則采用該形參的缺省值&#xff0c;否則使用指定的實參。 void Func(int a 0) {cout << a << endl; } int main() { Func()…

【Kubernetes】Kubernetes之Pod詳解

Pod 一、 Pod1. Pod 基礎概念2. 在 Kubrenetes 集群中 Pod 使用方式2.1 pasue 容器2.2 kubernetes 中的 pause 容器提供的功能 3. Pod 的概念和結構組成4. Pod 的分類5. Pod 容器的分類5.1 基礎容器&#xff08;infrastructure container&#xff09;5.2 初始化容器&#xff08…

07 |「異步任務」

前言 實踐是最好的學習方式&#xff0c;技術也如此。 文章目錄 前言一、進程與線程1、進程2、線程 二、實現三、異步任務加載器 一、進程與線程 1、進程 進程(Process)是操作系統分配資源的基本單位,它是一個執行中的程序實例&#xff1b;每個進程都有自己獨立的內存空間,不同…

【大數據】Flink 詳解(二):核心篇 Ⅲ

Flink 詳解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅲ 29、Flink 通過什么實現可靠的容錯機制&#xff1f; Flink 使用 輕量級分布式快照&#xff0c;設計檢查點&#xff08;checkpoint&#xff09;實現可靠容錯。 30、什么是 Checkpoin 檢查點&#xff1f; Checkpoint …

百度 amis 當成 UI 庫用

百度 amis 當成 UI 庫用 1.獲取到這些 amis 對外提供的方法 var amisLib amisRequire(amis);// 獲取到這些 amis 對外提供的方法。 2.js中使用百度amis中 confirm var name"name";amisLib.confirm(請確認刪除 name !,"刪除").then((confirmed) > {if…

如何進行游戲平臺搭建?

游戲平臺搭建涉及多個步驟和技術&#xff0c;下面是一個大致的指南&#xff1a; 市場調研和定位&#xff1a;首先&#xff0c;要了解游戲市場和受眾的需求&#xff0c;選擇適合的游戲類型和定位。 選擇平臺類型&#xff1a;決定是要搭建網頁平臺、移動應用平臺還是其他類型的…

群暉6.X便捷的安裝cpolar內網穿透

群暉6.X便捷的安裝cpolar內網穿透 文章目錄 群暉6.X便捷的安裝cpolar內網穿透前言1. 下載cpolar的群暉套件1.1 打開群暉套件中心1.2 選擇“手動安裝”1.3 選擇下載cpolar套件位置 2. 打開cpolar的Web-UI界面3. 注冊會員 前言 隨著硬件設備和軟件技術的發展&#xff0c;以及數據…