時間:2023-06-28 02:15:01 | 來源:網(wǎng)站運營
時間:2023-06-28 02:15:01 來源:網(wǎng)站運營
Java虛擬機詳解(七)------虛擬機監(jiān)控和分析工具(1)——命令行:通過前面的幾篇博客,我們介紹了Java虛擬機的內(nèi)存分配以及內(nèi)存回收等理論知識,了解這些知識對于我們在實際生產(chǎn)環(huán)境中提高系統(tǒng)的運行效率是有很大的幫助的。但是話又說回來,在實際生產(chǎn)環(huán)境中,線上項目正在運行,我們怎么去監(jiān)控虛擬機運行效率?又或者線上項目發(fā)生了OOM,異常堆棧信息,我們又怎么去抓取,然后怎么去分析定位問題呢?JVM Process Status Tools ,顯示指定系統(tǒng)內(nèi)所有的 HotSpot 虛擬機進程。該命令有如下常用參數(shù):
JVM Statistics Monitoring Tool,用于收集虛擬機各方面的運行數(shù)據(jù)。jstat 是用于監(jiān)視虛擬機各種運行時狀態(tài)信息的命令行工具。它可以顯示本地或遠(yuǎn)程虛擬機進程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行時數(shù)據(jù),它是運行時期定位虛擬機性能問題的首選工具。但是終究只是命令行工具,后面我們會介紹圖形化工具,更加直觀。
jinfo(Confiiguration Info for Java):實時的查看和調(diào)整虛擬機各項參數(shù)jinfo ,通過此命令,我們可以實時的查看和調(diào)整虛擬機的各項參數(shù)(包括顯示指定或默認(rèn)配置的)。
jmap(Memory Map for Java):用于生成堆存儲快照jmap主要用于獲取堆存儲快照文件,在生產(chǎn)環(huán)境中,發(fā)生OOM(堆內(nèi)存溢出)異常時,我們可以通過這個快照文件來快速定位到具體代碼位置。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath
下面,我們通過如下代碼,演示堆內(nèi)存溢出異常:package com.ys.algorithmproject.leetcode.demo.JVM;import java.util.ArrayList;import java.util.List;/** * Create by YSOcean * */public class JmapTest { private static final int _1MB = 1024*1024; /** * 虛擬機參數(shù)設(shè)置: -Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ * @param args */ public static void main(String[] args) { List<Object> list = new ArrayList<>(); while(true){ list.add(new Object[_1MB]); } }}
設(shè)置虛擬機參數(shù)后,然后運行這段代碼,就會發(fā)生堆內(nèi)存溢出異常,并在根目錄下生成快照文件 java_pid10840.hprof。jmap -dump:format=b,file=heap20190821.hprof 16823后面的數(shù)字是進程PID,可以通過jps命令來獲取。
Stack Trace for Java,用于生成虛擬機當(dāng)前時刻的線程快照。線程快照其實就是當(dāng)前虛擬機每一條線程正在執(zhí)行的堆棧的集合,通過線程快照可以用來定位線程出現(xiàn)長時間停頓的原因(線程間死鎖、死循環(huán)、請求外部資源導(dǎo)致的長時間等待)。
關(guān)鍵詞:虛擬,分析,工具,命令
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。