亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

后文會從 windows、linux 兩個系統(tǒng)來做示例展示,有人會有疑問了:為什么要說 Windows 版的 ? 目前市面上還是有很多 Windows 服務(wù)器的,應(yīng)用于傳統(tǒng)行業(yè)、政府結(jié)構(gòu)、醫(yī)療行業(yè) 等等;兩個系統(tǒng)下的情況都演示下,有備無患

后文中用到了兩個工具:Processor Explorer、MAT,它們是什么,有什么用,怎么用,本文不做介紹

cpu 100%

下面的示例中, cpu 的占有率沒到 100%,只是比較高,但是排查方式是一樣的,希望大家不要鉆牛角尖

Windows

1、找到 cpu 占有率最高的 JAVA 進(jìn)程號

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

PID: 20260

2、根據(jù)進(jìn)程號找到 cpu 占有率最高的線程號

雙擊剛剛找到的 java 進(jìn)程

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

線程號: 15900 ,轉(zhuǎn)成十六進(jìn)制: 3e1c

3、利用 jstack 生成虛擬機中所有線程的快照

命令: jstack -l {pid} > {path}

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

文件路徑: D:20260.stack

4、線程快照分析

我們先瀏覽下快照內(nèi)容

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

內(nèi)容還算比較簡潔,線程快照格式都是統(tǒng)一的,我們以一個線程快照簡單說明下

"main" #1 prio=5 os_prio=0 tid=0x0000000002792800 nid=0x3e1c runnable [0x00000000025cf000]

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

我們前面找到占 cpu 最高的線程號: 15900 ,十六進(jìn)制: 3e1c ,用 3e1c 去快照文件里面搜一下

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

自此,找到問題

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

Linux

排查方式與 Windows 版一樣,只是命令有些區(qū)別

1、找到 cpu 占有率最高的 java 進(jìn)程號

使用命令: top -c 顯示運行中的進(jìn)程列表信息, shift + p 使列表按 cpu 使用率排序顯示

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

PID = 2227 的進(jìn)程,cpu 使用率最高

2、根據(jù)進(jìn)程號找到 cpu 占有率最高的線程號

使用命令: top -Hp {pid} ,同樣 shift + p 可按 cpu 使用率對線程列表進(jìn)行排序

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

PID = 2228 的線程消耗 cpu 最高,十進(jìn)制的 2228 轉(zhuǎn)成十六進(jìn)制 8b4

3、利用 jstack 生成虛擬機中所有線程的快照

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

4、線程快照分析

分析方式與 Windows 版一致,我們可以把 2227.stack 下載到本地進(jìn)行分析,也可直接在 Linux 上分析

在 Linux 上分析,命令: cat 2227.stack |grep '8b4' -C 5

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

至此定位到問題

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

不管是在 Windows 下,還是在 Linux 下,排查套路都是一樣的

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

內(nèi)存泄露

同樣的,Windows、Linux 各展示一個示例

Windows

1、找到內(nèi)存占有率最高的進(jìn)程號 PID

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

第一眼看上去, idea 內(nèi)存占有率最高,因為我是以 idea 啟動的 java 進(jìn)程;idea 進(jìn)程我們無需關(guān)注,我們找到內(nèi)存占有率最高的 java 的 PID: 10824

2、利用 jmap 生成堆轉(zhuǎn)儲快照

命令: jmap -dump:format=b,file={path} {pid}

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

dump 文件路徑: D:heapdump_108244.hprof

3、利用 MAT 分析 dump 文件

MAT:Memory Analyzer Tool,是針對 java 的內(nèi)存分析工具;下載地址:

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

選擇對應(yīng)的版本,下載后直接解壓;默認(rèn)情況下,mat 最大內(nèi)存是 1024m ,而我們的 dump 文件往往大于 1024m,所以我們需要調(diào)整,在 mat 的 home 目錄下找到 MemoryAnalyzer.ini ,將 -Xmx1024m 修改成大于 dump 大小的空間, 我把它改成了 -Xmx4096m

接著我們就可以將 dump 文件導(dǎo)入 mat 中,開始 dump 文件的解析

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

解析是個比較漫長的過程,我們需要耐心等待

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

解析完成后,我們可以看到如下概況界面

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

各個窗口的各個細(xì)節(jié)就不做詳細(xì)介紹了,有興趣的可自行去查閱資料;我們來看看幾個圖:餅狀圖、直方圖、支配樹、可疑的內(nèi)存泄露報告

餅狀圖

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

可以看出, com.lee.schedule.Schedule 對象持有 1G 內(nèi)存,肯定有問題

直方圖

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

我們看下 Person 定義

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

可想而知,上圖標(biāo)記的幾項都與 Person 有關(guān)

支配樹

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

這就非常直觀了,Schedule 中的 ArrayList 占了 99.04% 的大小

可疑的內(nèi)存泄露報告

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

通過這些數(shù)據(jù),相信大家也能找到問題所在了

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

Linux

排查方式與 Windows 一樣,只是有稍許的命令區(qū)別

1、找到內(nèi)存占有率最高的進(jìn)程號

使用命令: top -c 顯示運行中的進(jìn)程列表信息, shift + m 按內(nèi)存使用率進(jìn)行排序

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

進(jìn)程號: 2527

2、利用 jmap 生成堆轉(zhuǎn)儲快照

命令: jmap -dump:format=b,file={path} {pid}

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

堆轉(zhuǎn)儲快照文件路徑: /opt/heapdump_2527.hprof

3、利用 MAT 分析堆轉(zhuǎn)儲快照

將 heapdump_2448.phrof 下載到本地,利用 MAT 進(jìn)行分析;分析過程與 Windows 版完全一致

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

自此,定位到問題

Windows下 與 Linux 下,排查流程是一樣的

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

總結(jié)

JVM 常用命令

jps:列出正在運行的虛擬機進(jìn)程

jstat:監(jiān)視虛擬機各種運行狀態(tài)信息,可以顯示虛擬機進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行數(shù)據(jù)

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

jmap:生成堆轉(zhuǎn)儲快照,也可以查詢 finalize 執(zhí)行隊列、Java 堆和永久代的詳細(xì)信息

jstack:生成虛擬機當(dāng)前時刻的線程快照

jhat:虛擬機堆轉(zhuǎn)儲快照分析工具

與 jmap 搭配使用,分析 jmap 生成的堆轉(zhuǎn)儲快照,與 MAT 的作用類似

排查步驟

1、先找到對應(yīng)的進(jìn)程: PID

2、生成線程快照 stack (或堆轉(zhuǎn)儲快照: hprof )

3、分析快照(或堆轉(zhuǎn)儲快照),定位問題

內(nèi)存泄露、內(nèi)存溢出和 CPU 100% 關(guān)系

 

JVM常見線上問題 → CPU 100%、內(nèi)存泄露 問題排查

 

常用 JVM 性能檢測工具

Eclipse Memory Analyer、JProfile、JProbe Profiler、JVisualVM、JConsole、Plumbr

分享到:
標(biāo)簽:JVM
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定