国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Java虛擬機詳解(七)------虛擬機監(jiān)控和分析工具(1)——命令行

Java虛擬機詳解(七)------虛擬機監(jiān)控和分析工具(1)——命令行

時間: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,異常堆棧信息,我們又怎么去抓取,然后怎么去分析定位問題呢?

本篇博客,我們就來介紹各種虛擬機監(jiān)控和分析工具,當(dāng)然都是命令行工具,不夠直觀,下篇博客我們會介紹各種可視化工具。

1、jps:顯示虛擬機進程

JVM Process Status Tools ,顯示指定系統(tǒng)內(nèi)所有的 HotSpot 虛擬機進程。
該命令有如下常用參數(shù):

①、-l

顯示應(yīng)用程序main類的完整包名稱或應(yīng)用程序的JAR文件的完整路徑名。

②、-v

顯示虛擬機啟動時的JVM參數(shù)。

③、-m

顯示虛擬機進程啟動時傳遞給主類 main() 函數(shù)的參數(shù)。

比如,我在服務(wù)器上啟動了一個Tomcat,如下:




  然后,輸入 jps 命令,打印信息如下:




  這里的 Bootstrap 便是啟動的 Tomcat進程??梢约由?-v 參數(shù),顯示所有傳遞給 JVM的參數(shù)信息。




  PS:jps 命令默認(rèn)是沒有安裝的,需要進行安裝,具體安裝步驟可以百度,我這里就不做詳細(xì)介紹了。

jps更多詳細(xì)信息,請參考官方文檔:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html

2、jstat:統(tǒng)計監(jiān)視虛擬機信息工具

JVM Statistics Monitoring Tool,用于收集虛擬機各方面的運行數(shù)據(jù)。
jstat 是用于監(jiān)視虛擬機各種運行時狀態(tài)信息的命令行工具。它可以顯示本地或遠(yuǎn)程虛擬機進程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行時數(shù)據(jù),它是運行時期定位虛擬機性能問題的首選工具。但是終究只是命令行工具,后面我們會介紹圖形化工具,更加直觀。

該命令監(jiān)控本地的格式如下:

jstat -參數(shù) vmid 采樣間隔時間 采樣次數(shù)

①、常用參數(shù)有如下




 ?、?、vmid

表示目標(biāo)虛擬機的標(biāo)識符,在Linux系統(tǒng)上可以通過上小節(jié)我們介紹的 jps 命令,前面輸出的數(shù)字便是進程 PID。在windows平臺上,可以通過任務(wù)管理器查看。

③、采樣間隔時間

默認(rèn)單位是毫毛,必須是正整數(shù)。

實例1:這里我們加入 -class 參數(shù),查看類裝載信息:




  相關(guān)表頭信息:

Loaded:加載的類數(shù)量。

Bytes:加載的類字節(jié)KB大小。

Unloaded:卸載的類數(shù)量。

Bytes:卸載的類字節(jié)KB大小。

Time:執(zhí)行類加載和卸載操作所花費的時間。

jstat更多詳細(xì)信息,請參考官方文檔:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

3、jinfo:實時的查看和調(diào)整虛擬機各項參數(shù)

jinfo(Confiiguration Info for Java):實時的查看和調(diào)整虛擬機各項參數(shù)
jinfo ,通過此命令,我們可以實時的查看和調(diào)整虛擬機的各項參數(shù)(包括顯示指定或默認(rèn)配置的)。

該命令格式如下:

jinfo [ 選項 ] pid

①、常用選項如下

一、沒有選項

打印系統(tǒng)屬性名稱鍵值對。




  二、-參數(shù)名稱

打印指定參數(shù)的名稱和值。




  三、-flag [+|-] 參數(shù)名稱

啟用或者禁用指定的布爾命令。

四、-flag name=value

設(shè)置參數(shù)name的值為value

五、-sysprops

打印Java屬性名稱鍵值對。

②、pid

進程號,和上面一樣,可以通過jps命令獲取。

jinfo更多詳細(xì)信息,請參考官方文檔:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html

4、jmap:內(nèi)存映像工具

jmap(Memory Map for Java):用于生成堆存儲快照
jmap主要用于獲取堆存儲快照文件,在生產(chǎn)環(huán)境中,發(fā)生OOM(堆內(nèi)存溢出)異常時,我們可以通過這個快照文件來快速定位到具體代碼位置。

這個命令還可以查詢 finalize 隊列,Java堆和永久代信息,如空間使用率、當(dāng)前用的是哪種垃圾收集器等。

該命令格式如下:

jmap [參數(shù)] pid

①、常用參數(shù)如下:




  對于堆內(nèi)存溢出異常,在前面介紹虛擬機參數(shù)時,我們介紹過,通過下面兩個參數(shù),也能夠打印堆內(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 命令來生成堆內(nèi)存快照呢?

jmap -dump:format=b,file=heap20190821.hprof 16823
后面的數(shù)字是進程PID,可以通過jps命令來獲取。

得到堆內(nèi)存快照了,那么我們怎么去查看呢?

在eclipse中,可以下載 MAT 工具,而在 IDEA中,可以下載 JProfiler 插件。實在不行,可以用我們下篇博客介紹的幾個可視化工具,具體情況見下篇博客。

jmap更多詳細(xì)信息,請參考官方文檔:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html

5、jstack:Java堆棧跟蹤工具

Stack Trace for Java,用于生成虛擬機當(dāng)前時刻的線程快照。
線程快照其實就是當(dāng)前虛擬機每一條線程正在執(zhí)行的堆棧的集合,通過線程快照可以用來定位線程出現(xiàn)長時間停頓的原因(線程間死鎖、死循環(huán)、請求外部資源導(dǎo)致的長時間等待)。

該命令格式如下:

jstack [選項] pid

①、常用選項如下:




參考文檔:https://docs.oracle.com/javase/8/docs/technotes/tools/index.html



關(guān)鍵詞:虛擬,分析,工具,命令

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉