国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java獲取到heapdump文件后,如何快速分析?

這篇具有很好參考價(jià)值的文章主要介紹了java獲取到heapdump文件后,如何快速分析?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

原創(chuàng):扣釘日記(微信公眾號ID:codelogs),歡迎分享,非公眾號轉(zhuǎn)載保留此聲明。

簡介

在之前的OOM問題復(fù)盤之后,本周,又一Java服務(wù)出現(xiàn)了內(nèi)存問題,這次問題不嚴(yán)重,只會觸發(fā)堆內(nèi)存占用高報(bào)警,沒有觸發(fā)OOM,但好在之前的復(fù)盤中總結(jié)了dump腳本,會在堆占用高時(shí)自動(dòng)執(zhí)行jstack與jmap,使得我們成功保留了問題現(xiàn)場。

查看堆占用分布

發(fā)現(xiàn)有heapdump文件后,我立馬拷貝到本機(jī),并使用MAT分析,如下:
java獲取到heapdump文件后,如何快速分析?
很顯然,好像是什么接口分配了非常大的String對象,一個(gè)String對象約200MB,那它是哪分配的呢?

查找大對象分配線程

這個(gè)分配行為肯定是某個(gè)線程做的,而線程是最常見的GC Root,因此只要查找對象的GC Root即可,如下:
java獲取到heapdump文件后,如何快速分析?
找到了大對象對應(yīng)的分配線程是http-nio-8088-exec-6,如下:
java獲取到heapdump文件后,如何快速分析?

查看線程棧

如何查看這個(gè)線程在干什么呢?在MAT中摸索了一會,沒找到相關(guān)內(nèi)容,回想起我們的dump腳本中記錄了jstack,打開看看,如下:
java獲取到heapdump文件后,如何快速分析?
可以發(fā)現(xiàn),這個(gè)線程正在做json序列化,但我仔細(xì)找了好一會,也沒有找到相關(guān)接口的Controller,這是因?yàn)榫€程已經(jīng)執(zhí)行完了Controller里面的邏輯,之后返回接口響應(yīng)數(shù)據(jù)時(shí)分配的大對象。

可是,線程棧中沒有業(yè)務(wù)代碼,就沒法定位是哪個(gè)接口有問題了。。。

檢查accesslog日志

考慮到分配大對象的接口肯定會很慢,于是我轉(zhuǎn)向查看tomcat的accesslog日志,如下:
java獲取到heapdump文件后,如何快速分析?
終于,找到了問題接口,這個(gè)接口是用來查詢商品數(shù)據(jù)的,當(dāng)輸入3時(shí)會查詢出所有3開頭的商品,而這有20w+數(shù)據(jù),解決問題很簡單,加個(gè)limit完事。

排查過程復(fù)盤

然而,我一直有個(gè)習(xí)慣,就是解決一個(gè)問題后,我會反思一下問題解決過程中有多少運(yùn)氣成分。

如果你經(jīng)常閱讀排查問題類的技術(shù)文章,就會發(fā)現(xiàn)不少文章,中間突然有一步定位到了問題根因,可能是突然發(fā)現(xiàn)了一個(gè)線索,或是硬看代碼看出來的,或是猜測某處有問題,我覺得這種排查過程都有不少運(yùn)氣成分,我希望問題是通過多年理論基礎(chǔ)的積累和對診斷工具的熟練使用,而有章法的一步步查出來的。

而上面通過accesslog能夠定位到問題,有一定的運(yùn)氣成分,因?yàn)楸敬蝺?nèi)存問題不極端,如果此接口請求量大,那就會瞬間觸發(fā)多次FGC,進(jìn)而會影響其它接口也變慢,進(jìn)而無法分辨出哪個(gè)是導(dǎo)致問題的接口!

我想,從理論上來說,Java堆文件里面,應(yīng)該有線程棧以及線程棧上的參數(shù),因?yàn)榫€程是對象,參數(shù)也是對象,它們理應(yīng)都在堆里,于是我找了個(gè)空閑時(shí)間,又摸索起MAT這個(gè)工具了。

MAT查看線程棧

摸索了一會,我就發(fā)現(xiàn)有這樣一個(gè)按鈕,可以查看線程信息,如下:
java獲取到heapdump文件后,如何快速分析?

找到前面說的線程http-nio-8088-exec-6,展開后,就可以發(fā)現(xiàn)線程棧以及棧上的參數(shù),如下:
java獲取到heapdump文件后,如何快速分析?

這就找到了請求的Request參數(shù)對象,再將Request對象多次展開后,就可以找到接口url信息,如下:
java獲取到heapdump文件后,如何快速分析?
嗯,這樣分析heapdump文件真tm的高效啊??

MAT下載地址:https://www.eclipse.org/mat/downloads.php

VisualVM查看線程棧

考慮到不少同學(xué)習(xí)慣用VisualVM分析heapdump,這里也放一下VisualVM的使用方法。

首先,加載heapdump文件,如下:
java獲取到heapdump文件后,如何快速分析?

然后選擇相應(yīng)對象,右鍵選擇Select in Threads,如下:
java獲取到heapdump文件后,如何快速分析?

定位到線程棧后,找到要查看的Request對象,點(diǎn)擊進(jìn)入,如下:
java獲取到heapdump文件后,如何快速分析?

同樣,展開Request對象后,可找到url信息,如下:
java獲取到heapdump文件后,如何快速分析?

VisualVM下載地址:https://visualvm.github.io/download.html

總結(jié)

雖然我也用MAT很多次了,但每次問題都太簡單,以至于沒有深入使用過MAT,導(dǎo)致到現(xiàn)在才知道有如此便捷的分析路徑。

如果你對我們的自動(dòng)dump腳本感興趣,可看看我之前寫的這兩篇文章。
一次線上OOM問題的個(gè)人復(fù)盤
jmap執(zhí)行失敗了,怎么獲取heapdump?文章來源地址http://www.zghlxwxcb.cn/news/detail-420724.html

到了這里,關(guān)于java獲取到heapdump文件后,如何快速分析?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • WEB攻防-Java安全&原生反序列化&SpringBoot攻防&heapdump提取&CVE

    WEB攻防-Java安全&原生反序列化&SpringBoot攻防&heapdump提取&CVE

    知識點(diǎn): 1、Java安全-原生反序列化-3大類接口函數(shù)利用 2、Java安全-SpringBoot攻防-泄漏安全CVE安全 序列化是將Java對象轉(zhuǎn)換成字節(jié)流的過程。而反序列化是將字節(jié)流轉(zhuǎn)換成Java對象的過程,java序列化的數(shù)據(jù)一般會以標(biāo)記( ac ed 00 05 )開頭,base64編碼的特征為 rO0AB 。 JAVA常見的序列化

    2024年02月03日
    瀏覽(25)
  • 用ClickHouse 文件表引擎快速查詢分析文件數(shù)據(jù)

    有時(shí)我們需要快速查詢分析文件數(shù)據(jù),正常流程需要在數(shù)據(jù)庫中創(chuàng)建表,然后利用工具或編碼導(dǎo)入數(shù)據(jù),這時(shí)才能在數(shù)據(jù)庫中查詢分析。利用ClickHouse文件引擎可以快速查詢文件數(shù)據(jù)。本文首先介紹ClickHouse文件引擎,然后介紹如何快速實(shí)現(xiàn)查詢數(shù)據(jù)文件的方案。 文件表引擎在

    2024年02月13日
    瀏覽(20)
  • 電腦IP地址密碼尋找指南:解密如何快速獲取IP地址登錄密碼?

    在使用電腦時(shí),你可能會遇到需要查找IP地址登錄密碼的情況。而對于大部分普通用戶來說,這項(xiàng)任務(wù)并不容易。那么,IP地址密碼到底在哪里找呢?本文將為你詳細(xì)解析,提供一些方法和技巧,幫助你快速找到電腦的IP地址密碼。 首先,我們需要弄清楚什么是IP地址密碼。

    2024年02月03日
    瀏覽(22)
  • flink源碼分析-獲取最大可以打開的文件句柄

    flink版本: flink-1.11.2 代碼位置: org.apache.flink.runtime.util.EnvironmentInformation 調(diào)用位置:? ?taskmanager啟動(dòng)類: ? org.apache.flink.runtime.taskexecutor.TaskManagerRunner 注意,該方法主要調(diào)用了com.sun.management.UnixOperatingSystemMXBean接口下的getMaxFileDescriptorCount方法,所以一定要在Sun/Oracle的JDK下才能使用

    2024年02月10日
    瀏覽(18)
  • 【QT】如何快速查找和獲取界面上的控件(findChild 和 findChidren)

    函數(shù)原型: 返回該對象的子對象,該子對象可以轉(zhuǎn)換為類型T。 T: T為模板,需要查找什么類型就寫什么類型。 name: 為對象的名稱 參數(shù) Qt::FindChildOptions options: (1)Qt::FindDirectChildrenOnly:只查看對象的直接子對象 (2)Qt::FindChildrenRecursively:查看對象的所有子對象(遞歸搜索

    2024年02月08日
    瀏覽(26)
  • 如何快速下載GEO數(shù)據(jù)并獲取其表達(dá)矩陣與臨床信息 | 附完整代碼 + 注釋

    如何快速下載GEO數(shù)據(jù)并獲取其表達(dá)矩陣與臨床信息 | 附完整代碼 + 注釋

    GEO數(shù)據(jù)庫可以說是大家使用頻率賊高的數(shù)據(jù)庫啦!那它里面的數(shù)據(jù)怎么下載大家知道嘛!今天給大家展示一種快速獲取它的表達(dá)矩陣和臨床信息的方法! 話不多說!咱們直接開始! 在GEO數(shù)據(jù)庫中,你找到了你需要的數(shù)據(jù),接下來怎么辦嘞!下載它!處理它! 比如,咱們今天

    2024年04月08日
    瀏覽(31)
  • 如何快速獲取zlibrary地址-使用zlib.pro 網(wǎng)站介紹,最新zlirbrary登錄方式

    zlib.pro 是一個(gè)提供 zlibrary 共享賬號的網(wǎng)站,用戶可以使用共享賬號直接登錄 zlibrary 網(wǎng)站,無需擔(dān)心每日10次的限制。這個(gè)網(wǎng)站為用戶提供了一個(gè)更方便的方式來獲取圖書資源。 使用 zlib.pro 很簡單,只需要前往該網(wǎng)站,選擇一個(gè)共享賬號,點(diǎn)擊該賬號的鏈接,在瀏覽器中打開

    2024年02月16日
    瀏覽(16)
  • 性能分析5部曲:瓶頸分析與問題定位,如何快速解決瓶頸?

    性能分析5部曲:瓶頸分析與問題定位,如何快速解決瓶頸?

    一、引言 很多做性能測試的同學(xué)都問過我這樣一個(gè)問題:魚哥(Carl_奕然),你說性能測試的重點(diǎn)是什么? 我的回答很簡單:瓶頸分析與問題定位。 在性能項(xiàng)目的整個(gè)周期,不管是腳本設(shè)計(jì),腳本編寫還是腳本執(zhí)行,都還算簡單。 難點(diǎn)在于如何定位瓶頸,分析瓶頸,解決瓶頸。

    2024年02月20日
    瀏覽(22)
  • java獲取文件夾下所有的文件

    對于一個(gè) 嵌套 的目錄,獲取目錄下所有的文件,可以使用以下兩種方式: 1. 通過遞歸獲取 File類提供了如下兩個(gè)方法: file.list():返回目錄下文件和子目錄名;(不會遞歸) file.listFiles():返回目錄下文件和子目錄File對象;(不會遞歸) 例子中List只是存放了文件夾下所有的

    2024年02月07日
    瀏覽(99)
  • java獲取本地文件和遠(yuǎn)程文件的方式

    問題背景:我們項(xiàng)目開發(fā)的時(shí)候,經(jīng)常會讀取文件,如果文件在本服務(wù)器,則直接用new File() 讀取即可,但是有時(shí)候需要遠(yuǎn)程讀取文件,比如讀取分布式存儲服務(wù)器的內(nèi)容或者是別人家的圖片資源,這個(gè)時(shí)候new File就無法滿足要求了。 下面提供列出獲取遠(yuǎn)程文件和本地文件的

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包