日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java dump分析工具_Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化...

發(fā)布時(shí)間:2025/3/19 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dump分析工具_Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
大家好,我是可樂(lè),一個(gè)專(zhuān)注原創(chuàng),樂(lè)于分享的程序猿。 本系列教程持續(xù)更新,可以微信搜索「 IT可樂(lè) 」第一時(shí)間閱讀。回復(fù)《電子書(shū)》有我為大家特別篩選的海量免費(fèi)書(shū)籍資料

通過(guò)前面的幾篇博客,我們介紹了Java虛擬機(jī)的內(nèi)存分配以及內(nèi)存回收等理論知識(shí),了解這些知識(shí)對(duì)于我們?cè)趯?shí)際生產(chǎn)環(huán)境中提高系統(tǒng)的運(yùn)行效率是有很大的幫助的。但是話又說(shuō)回來(lái),在實(shí)際生產(chǎn)環(huán)境中,線上項(xiàng)目正在運(yùn)行,我們?cè)趺慈ケO(jiān)控虛擬機(jī)運(yùn)行效率?又或者線上項(xiàng)目發(fā)生了OOM,異常堆棧信息,我們又怎么去抓取,然后怎么去分析定位問(wèn)題呢?

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

1、jps:顯示虛擬機(jī)進(jìn)程

JVM Process Status Tools ,顯示指定系統(tǒng)內(nèi)所有的 HotSpot 虛擬機(jī)進(jìn)程。

該命令有如下常用參數(shù):

①、-l

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

②、-v

顯示虛擬機(jī)啟動(dòng)時(shí)的JVM參數(shù)。

③、-m

顯示虛擬機(jī)進(jìn)程啟動(dòng)時(shí)傳遞給主類(lèi) main() 函數(shù)的參數(shù)。

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

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

  這里的 Bootstrap 便是啟動(dòng)的 Tomcat進(jìn)程。可以加上 -v 參數(shù),顯示所有傳遞給 JVM的參數(shù)信息。

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

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

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

JVM Statistics Monitoring Tool,用于收集虛擬機(jī)各方面的運(yùn)行數(shù)據(jù)。

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

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

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

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

  ②、vmid

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

③、采樣間隔時(shí)間

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

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

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

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

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

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

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

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

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

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

jinfo(Confiiguration Info for Java):實(shí)時(shí)的查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù)

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

該命令格式如下:

jinfo [ 選項(xiàng) ] pid

①、常用選項(xiàng)如下

一、沒(méi)有選項(xiàng)

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

  二、-參數(shù)名稱(chēng)

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

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

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

四、-flag name=value

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

五、-sysprops

打印Java屬性名稱(chēng)鍵值對(duì)。

②、pid

進(jìn)程號(hào),和上面一樣,可以通過(guò)jps命令獲取。

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

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

jmap(Memory Map for Java):用于生成堆存儲(chǔ)快照

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

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

該命令格式如下:

jmap [參數(shù)] pid

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

  對(duì)于堆內(nèi)存溢出異常,在前面介紹虛擬機(jī)參數(shù)時(shí),我們介紹過(guò),通過(guò)下面兩個(gè)參數(shù),也能夠打印堆內(nèi)存快照。

-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath

下面,我們通過(guò)如下代碼,演示堆內(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;/*** 虛擬機(jī)參數(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è)置虛擬機(jī)參數(shù)后,然后運(yùn)行這段代碼,就會(huì)發(fā)生堆內(nèi)存溢出異常,并在根目錄下生成快照文件 java_pid10840.hprof。

  那么,怎么通過(guò) jmap 命令來(lái)生成堆內(nèi)存快照呢?

jmap -dump:format=b,file=heap20190821.hprof 16823

后面的數(shù)字是進(jìn)程PID,可以通過(guò)jps命令來(lái)獲取。

得到堆內(nèi)存快照了,那么我們?cè)趺慈ゲ榭茨?#xff1f;

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

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

5、jstack:Java堆棧跟蹤工具

Stack Trace for Java,用于生成虛擬機(jī)當(dāng)前時(shí)刻的線程快照。

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

該命令格式如下:

jstack [選項(xiàng)] pid

①、常用選項(xiàng)如下:

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

本系列教程持續(xù)更新,可以微信搜索「 IT可樂(lè) 」第一時(shí)間閱讀。回復(fù)《電子書(shū)》有我為大家特別篩選的書(shū)籍資料

http://weixin.qq.com/r/iSqbg-fEGqplrbPg93_b (二維碼自動(dòng)識(shí)別)

總結(jié)

以上是生活随笔為你收集整理的java dump分析工具_Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。