【Arthas命令實踐】heapdump實現原理

🎮 作者主頁:點擊
🎁 完整專欄和代碼:點擊
🏡 博客主頁:點擊

文章目錄

  • 使用
  • 原理

使用

dump java heap, 類似 jmap 命令的 heap dump 功能。
【dump 到指定文件】

heapdump arthas-output/dump.hprof

【只 dump live 對象】

heapdump --live /tmp/dump.hprof

【dump 到臨時文件】

heapdump

原理

arthas實現類 HeapDumpCommand

 @Overridepublic void process(CommandProcess process) {try {String dumpFile = file;if (dumpFile == null || dumpFile.isEmpty()) {String date = new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date());File file = File.createTempFile("heapdump" + date + (live ? "-live" : ""), ".hprof");dumpFile = file.getAbsolutePath();file.delete();}process.appendResult(new MessageModel("Dumping heap to " + dumpFile + " ..."));run(process, dumpFile, live);process.appendResult(new MessageModel("Heap dump file created"));process.appendResult(new HeapDumpModel(dumpFile, live));process.end();} catch (Throwable t) {String errorMsg = "heap dump error: " + t.getMessage();logger.error(errorMsg, t);process.end(-1, errorMsg);}}private static void run(CommandProcess process, String file, boolean live) throws IOException {HotSpotDiagnosticMXBean hotSpotDiagnosticMXBean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);hotSpotDiagnosticMXBean.dumpHeap(file, live);}

主要實現dump命令的代碼

    /*** 生成堆轉儲文件* @param fileName 堆轉儲文件的輸出路徑* @param live 是否只轉儲存活對象* @throws Exception*/public static void dumpHeap(String fileName, boolean live) throws Exception {HotSpotDiagnosticMXBean hotSpotDiagnosticMXBean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);// 調用 dumpHeap 方法生成堆轉儲hotSpotDiagnosticMXBean.dumpHeap(fileName, live);}

這段代碼的作用是生成堆轉儲文件。這個方法的作用是使用 HotSpotDiagnosticMXBean 來調用 JVM 的原生堆轉儲功能,并將堆轉儲文件保存到指定路徑。

ManagementFactory 是 Java 的標準類庫,用于獲取 JMX(Java Management Extensions)相關的管理接口和 MBean。getPlatformMXBean 方法用于獲取特定平臺的 MBean。在這里,獲取的是 HotSpotDiagnosticMXBean 的實例。HotSpotDiagnosticMXBean 是 JVM 提供的一個接口,允許應用程序獲取和管理 JVM 的診斷信息。它提供了 dumpHeap 方法,能夠生成堆轉儲文件。

fileName:指定堆轉儲文件的保存路徑和文件名。該路徑是生成的堆轉儲文件將保存到的位置。
live:指示是否只轉儲存活對象(true 表示只轉儲存活的對象,false 則轉儲整個堆,包括未被引用的對象)。存活對象是指當前堆中仍然有引用指向的對象。

在這里插入圖片描述

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

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

相關文章

智能控制器開發項目-項目章程

目錄 1. 項目目的或理由 2. 項目描述 3. 高水平項目和產品需求 3.1項目需求: 3.2產品需求: 4. 總預算 5. 啟動風險 6.里程碑總表 7.項目目標與成功標準 8. 驗收標準 9. 項目經理職權層級 項目名稱:智能控制器開發項目 項目發起人…

繼承(補充)

大家好,今天補充一下繼承上執行順序的一點知識點,(編者這兩天要完成學院任務可能有點敷衍,抱歉抱歉),那么我們來看看。 [繼承關系上的執行順序] 1、父類靜態代碼優先于子類靜態代碼塊執行,且是最早執行. …

IOMMU PT

什么是 IOMMU PT IOMMU PT(Input/Output Memory Management Unit - Pass-Through)是一種技術,主要用于虛擬化環境中,特別是在使用直接設備分配(也稱為設備直通)的情況下。這項技術允許虛擬機直接訪問物理硬…

如何解決HTML和CSS相關情況下會導致頁面布局不穩定?

在實際開發過程中,HTML 和 CSS 的布局可能會出現不穩定的情況,導致頁面顯示混亂、錯位或者不如預期。以下是一些常見原因及實際項目中的代碼示例,幫助你理解如何避免這些問題。 1. 浮動元素未清除 (float 未清除) 問題:使用浮動…

【Rust自學】11.5. 在測試中使用Result<T, E>

喜歡的話別忘了點贊、收藏加關注哦(加關注即可閱讀全文),對接下來的教程有興趣的可以關注專欄。謝謝喵!(・ω・) 11.5.1. 測試函數返回值為Result枚舉 到目前為止,測試運行失敗的原因都是因為觸…

【HTML+CSS+JS+VUE】web前端教程-16-HTML5新增標簽

擴展知識 div容器元素,也是頁面中見到的最多的元素 div實現

python學習筆記—16—數據容器之元組

1. 元組——tuple(元組是一個只讀的list) (1) 元組的定義注意:定義單個元素的元組,在元素后面要加上 , (2) 元組也支持嵌套 (3) 下標索引取出元素 (4) 元組的相關操作 1. index——查看元組中某個元素在元組中的位置從左到右第一次出現的位置 t1 (&qu…

設計模式-結構型-橋接模式

1. 什么是橋接模式? 橋接模式(Bridge Pattern) 是一種結構型設計模式,它旨在將抽象部分與實現部分分離,使它們可以獨立變化。通過這種方式,系統可以在抽象和實現兩方面進行擴展,而無需相互影響…

Linux 虛擬機與windows主機之間的文件傳輸--設置共享文件夾方式

Linux 虛擬機與windows主機之間的文件傳輸 設置共享文件夾方式 在虛擬機中打開終端查看是否已經新建完成,到文件夾中找到它看一下,這個位置就能存儲東西啦

關于linux網橋(Linux Bridge)的一些個人記錄

文章目錄 1. Linux Bridge簡述2. 網橋創建創建配置持久化在Debian/Ubuntu系統上:在CentOS/RHEL系統上: 啟用和驗證 3. 關于linux網橋不轉發ip幀的問題原因解決配置持久化 4. 查看網橋學習交換表手動添加或刪除條目添加條目刪除條目 配置靜態條目設置條目…

期末概率論總結提綱(僅適用于本校,看文中說明)

文章目錄 說明A選擇題1.硬幣2.兩個事件的關系 與或非3.概率和為14.概率密度 均勻分布5.聯合分布率求未知參數6.聯合分布率求未知參數7.什么是統計量(記憶即可)8.矩估計量9.117頁12題10.顯著水平阿爾法(背公式就完了) 判斷題11.事件…

Inno Setup制作安裝包,安裝給win加環境變量

加 ; 加環境變量,開啟,下面一行 ChangesEnvironmentyes 和 ; 加環境變量wbrj變量名,{app}\project\bin變量值,{app}\后接文件名,{app}表示安裝路徑。下面一行,{olddata};原來的值上拼接 Root: HKLM; Subkey: “SYSTEM\…

Golang學習筆記_23——error補充

Golang學習筆記_20——error Golang學習筆記_21——Reader Golang學習筆記_22——Reader示例 文章目錄 error補充1. 基本錯誤處理2. 自定義錯誤3. 錯誤類型判斷3.1 類型斷言3.2 類型選擇 4. panic && recover 源碼 error補充 1. 基本錯誤處理 在Go中,函數…

Python中的asyncio:高效的異步編程模型

隨著互聯網應用的快速發展,程序的響應性和處理效率成為衡量系統性能的重要指標。傳統的同步編程模型在面對高并發和IO密集型任務時,常常顯得捉襟見肘,難以滿足現代應用的需求。Python的asyncio庫作為一種高效的異步編程模型,為開發…

JavaScript -- 數組詳解(使用頻率高)【數組專題】

文章目錄 前言一、創建數組1.1 使用Array構造函數1.2 使用數組字面量表示法1.3 ES6語法轉換數組1.3.1 from( )用于將類數組結構轉換為數組實例1.3.2 of( )用于將一組參數轉換為數組實例 二、數組常用方法2.1 復制和填充2.1.1 copyWithin( )2.1.2 fill( ) 2.2 數組轉換2.2.1 toS…

操作系統之文件系統的基本概念

目錄 用戶和磁盤視角的文件 文件控制塊(FCB)和索引結點(inode) 文件的操作 創建文件(create系統調用) 寫文件(write系統調用) 讀文件(read系統調用) 重…

如何制作一份出色的公司介紹PPT?

制作一份公司介紹的PPT需要精心設計,以確保內容既專業又吸引人。以下是一個基本的框架和一些建議,幫助您創建一份有效的公司介紹PPT: PPT標題頁 標題:公司全稱(可使用公司Logo作為背景或嵌入標題中)副標題…

springboot項目部署至linux

1.修改pom.xml 確認是否有以下代碼&#xff0c;沒有請進行添加&#xff0c;mainClass改成你的啟動類 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.ve…

vue.js 使用router-link替代a標簽實現高亮

在Vue.js中&#xff0c;可以使用<router-link>組件來替代<a>標簽實現高亮效果。<router-link>是Vue-Router提供的組件&#xff0c;用于路由導航。 首先&#xff0c;需要在Vue項目中安裝Vue-Router。可以使用以下命令安裝&#xff1a; npm install vue-rout…

FPGA隨記——時鐘時序一些基本知識

原文鏈接&#xff1a;跨時鐘域設計-CSDN博客 前言 CDC&#xff08;clock domain crossing&#xff09;檢查&#xff08;跨時鐘域的檢查&#xff09;是對電路設計中同步電路設計的檢查。非同步時鐘沒有固定的相位關系&#xff0c;這樣Setup/Hold不滿足而產生了亞穩態是無法避免…