【JVM系列6】JDK常用監(jiān)控指令和監(jiān)控工具分析及OutOfMemory異常分析

前言

JVM系列前5篇文章相對(duì)偏向于理論加矛,從這篇開(kāi)始將會(huì)結(jié)合實(shí)際場(chǎng)景進(jìn)行分析以及如何對(duì)JVM進(jìn)行調(diào)優(yōu)蚂且。

JVM參數(shù)

所謂的JVM調(diào)優(yōu)說(shuō)白了就是去設(shè)置一個(gè)合理的减细,適合當(dāng)前系統(tǒng)的JVM所提供的參數(shù)流济。從總體上來(lái)說(shuō)JVM參數(shù)可以分為三大類:標(biāo)準(zhǔn)參數(shù)绍弟,-X參數(shù)技即,-XX參數(shù)

標(biāo)準(zhǔn)參數(shù)

以“-”開(kāi)頭的參數(shù)稱之為標(biāo)準(zhǔn)參數(shù)晌柬,標(biāo)準(zhǔn)參數(shù)是任何一個(gè)JDK版本都支持的參數(shù)姥份,比較穩(wěn)定,一般不會(huì)隨著jdk版本的變化而變化年碘。
比如:

-version
-help
-server
-cp

-X參數(shù)

以-X開(kāi)頭的參數(shù)是在特定版本HotSpot支持的命令澈歉,jdk版本變化之后,參數(shù)可能會(huì)發(fā)生變化屿衅。這個(gè)參數(shù)用的比較少埃难。如以下幾種:

-Xint   解釋執(zhí)行
-Xcomp  第一次使用就編譯成本地代碼
-Xmixed  混合模式,JVM自己來(lái)決定

這種參數(shù)用的比較少涤久,了解就可以了涡尘,在這里不做演示

-XX參數(shù)

-XX是一種不穩(wěn)定的參數(shù),下一個(gè)版本可能會(huì)取消响迂。-XX是JVM調(diào)優(yōu)時(shí)的主要參數(shù)考抄。
-XX參數(shù)分為Boolean型非Boolean型。

Boolean型

Boolean類型的-XX參數(shù)使用格式為:

-XX:[+-]<name>      +或-表示啟用或者禁用name屬性

如:

-XX:+UseConcMarkSweepGC  表示啟用CMS類型的垃圾回收器
-XX:+UseG1GC             表示啟用G1類型的垃圾回收器
-XX:+PrintFlagsFinal     表示打印出所有的JVM參數(shù)信息

打印所有JVM參數(shù)

我們用-XX:+PrintFlagsFinal去打印一下所有的參數(shù)出來(lái)看一下:
任意新建一個(gè)Java類:

package com.zwx.jvm;

public class TestJVMParam {
    public static void main(String[] args) {
        System.out.println(11);
    }
}

本人用的是IntelliJ IDEA工具蔗彤,選擇:Run–>Edit Configurations川梅,然后點(diǎn)擊左邊的+號(hào),選擇Application然遏,出現(xiàn)如下所示界面贫途,加入JVM參數(shù):

在這里插入圖片描述

然后運(yùn)行main方法,就會(huì)打印出所有參數(shù)(有700多個(gè)):


在這里插入圖片描述

注意:上圖中打印出來(lái)的參數(shù)中

“=”表示默認(rèn)值待侵,“:=”表示被用戶或JVM修改后的值

非Boolean型

非Boolean類型的-XX參數(shù)的使用格式為:

-XX<name>=<value>    name表示屬性丢早,value表示屬性對(duì)應(yīng)的值

如:

-XX:MaxMetaspaceSize=5M    設(shè)置最大永久代空間大小(jdk1.8)

其他參數(shù)

還有其他一些我們非常常用的參數(shù),比如:-Xms秧倾,-Xmx怨酝,-Xss傀缩,但是實(shí)際上這幾種參數(shù)也是屬于-XX參數(shù),這幾種寫(xiě)法不過(guò)就是一種為了方便而設(shè)置的簡(jiǎn)寫(xiě)形式凫碌。所以在上面打印出來(lái)的參數(shù)中搜索-Xms扑毡,-Xmx,-Xss是搜索不到的盛险。

-Xms1000等價(jià)于-XX:InitialHeapSize=1000
-Xmx1000等價(jià)于-XX:MaxHeapSize=1000
-Xss100等價(jià)于-XX:ThreadStackSize=100

常用JVM參數(shù)

參數(shù) 含義 說(shuō)明
-XX:CICompilerCount=3 最大并行編譯數(shù) 大于1時(shí)可以提高編譯速度瞄摊,但會(huì)影響系統(tǒng)穩(wěn)定性,增加JVM崩潰的可能
-XX:InitialHeapSize=100M 初始化堆大小 簡(jiǎn)寫(xiě)-Xms100M
-XX:MaxHeapSize=100M 最大堆大小 簡(jiǎn)寫(xiě)-Xmx100M
-XX:NewSize=20M 設(shè)置年輕代的大小 -
-XX:MaxNewSize=50M 年輕代最大大小 -
-XX:OldSize=50M 設(shè)置老年代大小 -
-XX:MetaspaceSize=50M 設(shè)置方法區(qū)大小 jdk1.8中才有苦掘,利用元空間實(shí)現(xiàn)方法區(qū)
-XX:MaxMetaspaceSize=50M 方法區(qū)最大大小 jdk1.8中才有换帜,利用元空間實(shí)現(xiàn)方法區(qū)
-XX:+UseParNewGC 設(shè)置ParNe為新生代收集器 默認(rèn)會(huì)選擇Serial old作為老年代收集器和其配合
-XX:+UseParallelGC 設(shè)置Parallel Scavenge為新生代收集器,系統(tǒng)默認(rèn)會(huì)選擇Parallel Old為老年代垃圾收集器 這個(gè)組合是jdk1.8中默認(rèn)組合鹤啡,吞吐量?jī)?yōu)先的垃圾收集器
-XX:+UseParallelOldGC 設(shè)置Parallel Old為老年代垃圾收集器惯驼,系統(tǒng)默認(rèn)會(huì)選擇Parallel Scavenge為新生代垃圾收集器 -
-XX:+ParallelGCThreads 設(shè)置并行收集垃圾的線程數(shù) 一般設(shè)置為和cpu個(gè)數(shù)相同,這個(gè)參數(shù)也適用于CMS收集器
-XX:+UseConcMarkSweepGC 選擇CMS為老年代收集器递瑰,同時(shí)系統(tǒng)默認(rèn)會(huì)選擇ParNew為新生代收集器 如果CMS收集器出現(xiàn)了Concurrent Mode Failure祟牲,則會(huì)切換到Serial Old為老年代收集器
-XX:+CMSScavengeBeforeRemark CMS收集器在最終標(biāo)記前發(fā)生一次Young GC -
-XX:CMSMaxAbortablePrecleanTime CMS收集器的可中斷預(yù)清理階段最長(zhǎng)停留時(shí)間 默認(rèn)是5000,單位是毫秒
-XX:+UseG1GC 使用G1作為收集器 同時(shí)適用于新生代和老年代抖部,是一款停頓時(shí)間優(yōu)先的垃圾收集器说贝,jdk1.9中默認(rèn)垃圾收集器
-XX:NewRatio 新老生代的比值 比如-XX:Ratio=4,則表示新生代:老年代=1:4
-XX:SurvivorRatio 兩個(gè)S區(qū)和Eden區(qū)的比值 比如-XX:SurvivorRatio=8慎颗,也就是(S0+S1):Eden=2:8
-XX:+HeapDumpOnOutOfMemoryError 啟動(dòng)堆內(nèi)存溢出打印 當(dāng)JVM堆內(nèi)存發(fā)生溢出時(shí)乡恕,也就是OOM,自動(dòng)生成dump文件
-XX:HeapDumpPath=heap.hprof 指定堆內(nèi)存溢出打印目錄 表示在當(dāng)前目錄生成一個(gè)heap.hprof文件
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:$CATALINA_HOME/logs/gc.log 打印出GC日志 不同的垃圾收集器總體格式相同俯萎,但是會(huì)有小差別傲宜,G1相比較其他收集器,差別較大
-Xss128k 設(shè)置每個(gè)線程的堆棧大小 經(jīng)驗(yàn)值是3000-5000最佳
-XX:MaxTenuringThreshold=6 新生代對(duì)象進(jìn)入年老代的最大臨界值 默認(rèn)15
-XX:InitiatingHeapOccupancyPercent 啟動(dòng)并發(fā)GC周期時(shí)堆內(nèi)存使用占比 G1之類的垃圾收集器用它來(lái)觸發(fā)并發(fā)GC周期,基于整個(gè)堆的使用率,而不只是某一代內(nèi)存的使用比. 值為 0 則表示”一直執(zhí)行GC循環(huán)”. 默認(rèn)值為 45
-XX:G1HeapWastePercent 允許的浪費(fèi)堆空間的占比 用于G1垃圾收集器夫啊。默認(rèn)是10%函卒,如果并發(fā)標(biāo)記可回收的空間小于10%,則不會(huì)觸發(fā)MixedGC
-XX:ConcGCThreads=n 并發(fā)垃圾收集器使用的線程數(shù)量 默認(rèn)值隨JVM運(yùn)行的平臺(tái)不同而不同
-XX:G1MixedGCLiveThresholdPercent=65 混合垃圾回收周期中要包括的舊區(qū)域設(shè)置占用率閾值 默認(rèn)占用率為 65%
-XX:G1MixedGCCountTarget=8 設(shè)置標(biāo)記周期完成后,對(duì)存活數(shù)據(jù)上限為G1MixedGCLIveThresholdPercent的舊區(qū)域執(zhí)行混合垃圾回收的目標(biāo)次數(shù) 默認(rèn)8次混合垃圾回收撇眯,混合回收的目標(biāo)是要控制在此目標(biāo)次數(shù)以內(nèi)
-XX:G1OldCSetRegionThresholdPercent=1 描述Mixed GC時(shí)谆趾,Old Region被加入到CSet中 默認(rèn)情況下,G1只把10%的Old Region加入到CSet中

常用命令監(jiān)控工具

jdk中的bin目錄下提供了許多功能強(qiáng)大的工具可以幫助我們監(jiān)控虛擬機(jī)的使用情況叛本,掌握了這些常用工具的使用可以幫助我們更快更直觀的分析問(wèn)題。

工具和參數(shù)都是在不斷使用的過(guò)程中掌握的彤钟,并不需要一下子就全部看完来候,可以大致瀏覽有個(gè)印象,

建議大家可以收藏本篇文章逸雹,后續(xù)需要用到的時(shí)候方便查看

以下的演示均是基于linux環(huán)境下jdk1.8版本進(jìn)行演示营搅,不能環(huán)境和版本可能會(huì)有較大差異云挟。

Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
復(fù)制代碼

jps

jps:JVM Process Status Tool,一款用于查看java進(jìn)程的工具转质。這款工具的功能非常簡(jiǎn)單园欣,就是查看當(dāng)前環(huán)境下運(yùn)行的java服務(wù)的進(jìn)程id和名稱,一般其他命令使用前都會(huì)先使用jps命令獲取java進(jìn)程信息休蟹。
如下圖所示:

[圖片上傳失敗...(image-e1d4c9-1600758866646)]

<figcaption></figcaption>

jps參數(shù)主要有如下選項(xiàng):

選項(xiàng) 說(shuō)明
-q 只輸出進(jìn)程id
-m 輸出虛擬機(jī)啟動(dòng)時(shí)傳遞給main()方法的參數(shù)
-l 輸出主類的全名沸枯,如果進(jìn)行執(zhí)行的是jar包,則輸出jar包路徑
-v 輸出啟動(dòng)虛擬機(jī)的參數(shù)

jstat

jstat:JVM Statistics Monitoring赂弓,一款用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)統(tǒng)計(jì)信息工具绑榴。主要可以顯示如下信息:虛擬機(jī)進(jìn)程的類裝載、內(nèi)存盈魁、垃圾收集翔怎、JIT編譯等運(yùn)行數(shù)據(jù)信息。

查看類裝載信息

jstat -class PID 1000 10 //查看某個(gè)java進(jìn)程的類裝載信息杨耙,每1000毫秒輸出一次赤套,共輸出10次
復(fù)制代碼
image.png

查看垃圾收集信息

jstat -gc PID 1000 10
復(fù)制代碼

[圖片上傳失敗...(image-ff9f04-1600758866646)]

上圖中就顯示個(gè)各個(gè)區(qū)以及垃圾回收的情況,具體代表含義如下:
注意:C表示Capacity(容量),U表示Used(已使用大小)

  • 1珊膜、S0C容握、S1C表示的是Survive區(qū)的S0和S1大小(Capacity)
  • 2、S1U辅搬、S2U表示已使用空間大小(Used)
  • 3唯沮、EC、EU分別表示Eden區(qū)總?cè)萘亢鸵咽褂萌萘看笮?/li>
  • 4堪遂、OC介蛉、OU分別表示老年代總空間大小和已使用大小
  • 5、MC溶褪、MU:表示方法區(qū)(jdk1.8中通過(guò)Metaspace實(shí)現(xiàn))的總空間大小和已使用大小
  • 6币旧、CCSC、CCSU:表示壓縮類空間總大小和已使用大小
  • 7猿妈、YGC吹菱、YGT:新生代GC次數(shù)和GC總耗時(shí)
  • 8、FGC彭则、FGCT:Full GC次數(shù)和Full GC總耗時(shí)
  • 9鳍刷、GCT:GC總消耗時(shí)間

如果對(duì)上面含義中涉及到的各種分區(qū)不了解的,可以點(diǎn)擊這里詳細(xì)了解俯抖。

jstat參數(shù)常用選項(xiàng)

參數(shù) 說(shuō)明
-class 查看類加載/卸載數(shù)量和大小输瓜,以及所耗費(fèi)的時(shí)間
-gc 統(tǒng)計(jì)堆內(nèi)各個(gè)分區(qū)的總大小及已使用大小,以及不同分區(qū)的次數(shù)和耗時(shí)等信息
-gccapacity 同-gc相似,但是主要統(tǒng)計(jì)Java堆各個(gè)區(qū)域使用到的最大和最小空間
-gcutil 同-gc類似尤揣,但是主要統(tǒng)計(jì)已使用空間占總空間的大小
-gccause 同-gcutil一樣搔啊,只是會(huì)額外輸出上一次發(fā)生GC原因
-gcnew 統(tǒng)計(jì)新生代的GC情況
-gcnewcapacity 同-gcnew類似,但是主要統(tǒng)計(jì)使用到的最大和最小空間
-gcold 統(tǒng)計(jì)老年代的GC情況
-gcoldcapacity 同-gcold類似北戏,但是主要統(tǒng)計(jì)使用到的最大和最小空間
-gcpermcapaticy 統(tǒng)計(jì)永久代使用到的最大和最小空間
-compiler 輸出JIT編譯器編譯過(guò)得方法和耗時(shí)等信息
-printcompilation 輸出已經(jīng)被JIT編譯的方法

jstack

jstack:Stack Trace for Java负芋,一款用于生成當(dāng)前時(shí)刻的線程狀態(tài)信息的快照工具。這個(gè)對(duì)于用來(lái)分析當(dāng)前線程狀態(tài)時(shí)非常有用的嗜愈,比如說(shuō)是否有哪個(gè)線程阻塞了旧蛾,或者說(shuō)是否發(fā)生死鎖等信息。
如:

jstack PID
在這里插入圖片描述

可以清晰的看到當(dāng)前線程的狀態(tài)芝硬。另外線程的名字也會(huì)打印出來(lái)蚜点,所以在我們自己創(chuàng)建線程的時(shí)候建議是采用自定義的名稱,這樣如果有異常我們可以很容易的知道是哪個(gè)線程出了問(wèn)題拌阴。

jstack參數(shù)常用選項(xiàng)

參數(shù) 說(shuō)明
-F 當(dāng)正常請(qǐng)求不被響應(yīng)時(shí)绍绘,強(qiáng)制輸出線程堆棧
-l 除堆棧外,顯示關(guān)于鎖的附加信息
-m 當(dāng)調(diào)用本地方法時(shí)迟赃,可以顯示C/C++的堆棧

jinfo

jinfo:Configuration Info For Java陪拘,一款用于實(shí)時(shí)查看和修改JVM參數(shù)的工具。

注意纤壁,如果是修改的話左刽,只能用我們上面使用命令打印出來(lái)參數(shù)中的manageable類型才可以被修改。

jinfo -flag name PID 查看某個(gè)java進(jìn)程的name屬性的值
jinfo -flags PID 查看已經(jīng)賦值的JVM參數(shù)

針對(duì)Boolean類型的-XX參數(shù)修改命令為:

jinfo -flag [+|-]name PID

針對(duì)非Boolean類型的-XX參數(shù)修改命令為:

jinfo -flag name=value PID

如:

image.png

jmap

jmap:Memory Map for Java酌媒,一款用于生成堆轉(zhuǎn)儲(chǔ)快照即dump文件的命令欠痴。
如:

jmap -heap PID  //打印出堆內(nèi)存相關(guān)信息
在這里插入圖片描述
jmap -dump:format=b,file=/usr/heap.hprof PID //生成dump文件
1
在這里插入圖片描述

但是其實(shí)上面的常用參數(shù)中也有一個(gè)參數(shù)可以設(shè)置,一旦發(fā)生OutOfMemoryError之后就會(huì)自動(dòng)生成dump文件秒咨,這對(duì)我們分析生產(chǎn)環(huán)境發(fā)生OOM的原因是非常重要的喇辽。
如下,我們?cè)賗dea中進(jìn)行設(shè)置自動(dòng)生成dump文件:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

我們利用在JVM系列文章1中所提供的一個(gè)堆內(nèi)存的例子來(lái)進(jìn)行演示一下:

在這里插入圖片描述
image.png

運(yùn)行之后發(fā)生OOM異常雨席,然后可以找到對(duì)應(yīng)目錄下已經(jīng)生成了dump文件菩咨。

既然我們生成了dump文件,肯定是要對(duì)文件進(jìn)行分析的陡厘,但是我們?cè)趺捶治鲞@個(gè)文件呢抽米?因?yàn)橹苯哟蜷_(kāi)時(shí)亂碼的,所以我們肯定需要一款工具來(lái)對(duì)dump文件進(jìn)行分析

jhat

jhat:JVM Heap Analysis Tool糙置,一款用來(lái)分析dump文件的工具云茸。
如:

jhat heap.hprof

image.png

然后訪問(wèn)地址:http://localhost:7000/

在這里插入圖片描述

可以看到谤饭,這款工具所展示的信息比較簡(jiǎn)單查辩,而且因?yàn)槭敲钚问降呐值眩院茈y直接分析出問(wèn)題,一般情況如果有其他工具可以選擇的話宜岛,并不建議使用這款工具來(lái)分析,接下來(lái)我們就來(lái)看一看可視化工具的使用

可視化監(jiān)控工具

JConsole工具

JConsole:Java Monitoring and Management Console功舀,是一款JDK自帶的可視化監(jiān)控工具萍倡。其實(shí)就是把上面的比如jstat,jstack等命令工具統(tǒng)計(jì)的信息可視化了,主要可以查看java應(yīng)用程序的運(yùn)行概況辟汰、監(jiān)控堆信息列敲、永久區(qū)使用情況、類加載情況等信息帖汞。

JConsole使用方式可以直接在命令行中輸入命令:jconsole戴而,或者直接找到j(luò)dk安裝目錄下找到j(luò)console.exe執(zhí)行文件,雙擊打開(kāi)即可翩蘸。

在這里插入圖片描述

本地連接的話很簡(jiǎn)單所意,選中一個(gè)服務(wù)雙擊即可,如果是遠(yuǎn)程連接催首,需要遠(yuǎn)程的Java服務(wù)在啟動(dòng)的時(shí)候就配置JMX相關(guān)連接參數(shù)扶踊。
進(jìn)入之后看到如下界面:


在這里插入圖片描述

可以看到頂部有6個(gè)標(biāo)簽可以切換,在這里就不詳細(xì)去介紹每個(gè)地方有什么用了郎任,自己去嘗試的話其實(shí)是一目了然的秧耗,可以看到內(nèi)存各個(gè)區(qū)間的使用情況,線程信息(線程名字都會(huì)展示)舶治,以及類加載等信息分井。

VisualVM工具

VisualVM:All-in-one Java TroubleshootingTool,是JDK發(fā)布的一款功能最強(qiáng)大的運(yùn)行監(jiān)控故故障處理工具霉猛,正如名字所說(shuō)的All-in-one尺锚,可以預(yù)見(jiàn)這是一款功能非常齊全的工具。
VisualVM主要功能如下:

  • 顯示虛擬機(jī)進(jìn)程及進(jìn)程的配置環(huán)境信息(jps韩脏、jinfo功能)缩麸。
  • 監(jiān)視應(yīng)用程序的CPU、GC赡矢、堆杭朱、方法區(qū)和線程信息(jstat、jstack功能)吹散。
  • dump文件生成及分析(jmap弧械、jhat功能)。
  • 方法級(jí)的程序性能分析空民,可以找出被調(diào)用最多刃唐,運(yùn)行時(shí)間最長(zhǎng)的方法羞迷。
  • 離線程序快照:收集程序運(yùn)行時(shí)配置、線程dump画饥、內(nèi)存dump等信息建立一個(gè)快照衔瓮,并可以將快照發(fā)送開(kāi)發(fā)者處進(jìn)行Bug反饋
  • 插件化處理,可以有無(wú)限擴(kuò)展的可能性

打開(kāi)VisualVM工具的方式可以直接在命令行中輸入命令:jvisualvm抖甘,或者直接找到j(luò)dk安裝目錄下找到j(luò)visualvm.exe執(zhí)行文件热鞍,雙擊打開(kāi)即可。

在這里插入圖片描述

打開(kāi)之后在左邊選擇自己的本地或者遠(yuǎn)程應(yīng)用(同樣需要遠(yuǎn)程服務(wù)支持JMX服務(wù))之后衔彻,可以看到右邊界面薇宠,注意,默認(rèn)只有前面5個(gè)頁(yè)簽艰额,最后一個(gè)頁(yè)簽是插件加入進(jìn)來(lái)的澄港,不同的插件可以看到不同的功能,我這邊選擇的插件是com-sun-tools-visualvm-modules-visualgc.nbm插件柄沮,這是一個(gè)比較有意思的插件回梧,我們?cè)谥胺治?a target="_blank">Java堆內(nèi)存劃分的一篇文章中提到了一個(gè)對(duì)象的在堆內(nèi)的流轉(zhuǎn)圖,這個(gè)插件打開(kāi)之后可以動(dòng)態(tài)演示堆內(nèi)各個(gè)區(qū)域內(nèi)存變化铡溪,感興趣的可以嘗試下漂辐。

插件使用和下載

點(diǎn)擊主界面工具欄內(nèi):工具–>插件–>已下載–>添加插件,然后安裝即可棕硫,如下圖:

在這里插入圖片描述

安裝之后重新打開(kāi)就可以看到多了一個(gè)頁(yè)簽髓涯,打開(kāi)之后可以實(shí)時(shí)監(jiān)控內(nèi)存變化


在這里插入圖片描述

在插件頁(yè)面點(diǎn)擊設(shè)置可以看到最新的插件下載地址(需要vpn才能連接):


在這里插入圖片描述

分析dump文件

假如生產(chǎn)環(huán)境發(fā)生OutOfMemoryError,我們拿到dump文件之后哈扮,就可以借助VisualVM來(lái)使用纬纪,點(diǎn)擊工具欄中文件–>裝入(注意要選擇文件類型),然后找到對(duì)應(yīng)的dump文件就可以打開(kāi)了

在這里插入圖片描述

打開(kāi)之后點(diǎn)擊“類”:


在這里插入圖片描述

可以看到是Integer對(duì)象撐爆了內(nèi)存滑肉,因?yàn)樯厦娴睦邮鞘且粋€(gè)非常簡(jiǎn)單的demo包各,就是不斷地往list中添加了Integer數(shù)據(jù),所以結(jié)合工具可以非常清晰的看到是這個(gè)對(duì)象出了問(wèn)題靶庙,從而定位到問(wèn)題所在问畅。

這個(gè)工具也可以直接dump文件:

在這里插入圖片描述

這個(gè)工具也可以實(shí)時(shí)設(shè)置自動(dòng)dump文件分析:


在這里插入圖片描述

總之這是款非常強(qiáng)大的工具,還有其他許多功能六荒,而且插件化工作原理使得其提供了無(wú)限的功能擴(kuò)展护姆,有興趣的可以自己去官網(wǎng)下載不同的插件下來(lái)進(jìn)行試用

其他工具

除了JVM官方提供的工具,還有其他第三方也提供了一些非常優(yōu)秀的工具可以幫助我們更好的分析dump文件掏击,比如說(shuō)阿里巴巴提供的在線實(shí)時(shí)分析工具Arthas卵皂,還有 MAT,Histogram等都是非常優(yōu)秀的工具砚亭。

總結(jié)

本文主要介紹了一些JVM的一些常用參數(shù)的使用灯变,以及JVM提供的一些常用的監(jiān)控工具殴玛,并且利用一個(gè)OOM例子結(jié)合工具來(lái)講述了如何分析OOM時(shí)的dump文件,當(dāng)然添祸,本文的主要目的是告訴大家有哪些工具可以使用滚粟,但是對(duì)一個(gè)工具的使用并沒(méi)有非常詳細(xì)的介紹,大家都是程序員膝捞,相信只要知道了有這么一款工具坦刀,使用的時(shí)候也可以非常容易上手,關(guān)鍵在于實(shí)踐蔬咬,多使用才能積累經(jīng)驗(yàn)。工具畢竟只是工具沐寺,只是可以更好的幫助我們分析問(wèn)題林艘,更重要的是發(fā)現(xiàn)問(wèn)題之后該如何針對(duì)問(wèn)題進(jìn)行修改和優(yōu)化,這才是使用工具的目的混坞。
下一篇狐援,將介紹一下如何分析GC日志,畢竟要想對(duì)JVM調(diào)優(yōu)究孕,GC日志是必須要學(xué)會(huì)進(jìn)行查看分析的啥酱。

請(qǐng)關(guān)注我,和一起學(xué)習(xí)進(jìn)步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厨诸,一起剝皮案震驚了整個(gè)濱河市镶殷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌微酬,老刑警劉巖绘趋,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颗管,居然都是意外死亡陷遮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門垦江,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)帽馋,“玉大人,你說(shuō)我怎么就攤上這事比吭≌雷澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵梗逮,是天一觀的道長(zhǎng)项秉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)慷彤,這世上最難降的妖魔是什么娄蔼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任怖喻,我火速辦了婚禮,結(jié)果婚禮上岁诉,老公的妹妹穿的比我還像新娘锚沸。我一直安慰自己,他們只是感情好涕癣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布哗蜈。 她就那樣靜靜地躺著,像睡著了一般坠韩。 火紅的嫁衣襯著肌膚如雪距潘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天只搁,我揣著相機(jī)與錄音音比,去河邊找鬼。 笑死氢惋,一個(gè)胖子當(dāng)著我的面吹牛洞翩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焰望,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骚亿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了熊赖?” 一聲冷哼從身側(cè)響起来屠,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秫舌,沒(méi)想到半個(gè)月后的妖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡足陨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年嫂粟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墨缘。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡星虹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镊讼,到底是詐尸還是另有隱情宽涌,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布蝶棋,位于F島的核電站卸亮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏玩裙。R本人自食惡果不足惜兼贸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一段直、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溶诞,春花似錦鸯檬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枉圃,卻和暖如春功茴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孽亲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工痊土, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墨林。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像犯祠,于是被迫代替她去往敵國(guó)和親旭等。 傳聞我的和親對(duì)象是個(gè)殘疾皇子损敷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348