<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java進(jìn)行內(nèi)存泄露? GC 分析都有哪些常用好用的工具

          共 2501字,需瀏覽 6分鐘

           ·

          2020-12-24 04:00

          點(diǎn)擊上方「藍(lán)字」關(guān)注我們

          使用Java語(yǔ)言開(kāi)發(fā)應(yīng)用程序,雖然JVM幫我們進(jìn)行了GC收集、清除工作;但是使用不當(dāng)?shù)脑?,還是會(huì)導(dǎo)致某些對(duì)象常駐堆空間無(wú)法給垃圾收集器清除,導(dǎo)致內(nèi)存泄露、內(nèi)存溢出等情況,今天盤(pán)點(diǎn)一下在項(xiàng)目中進(jìn)行內(nèi)存泄露分析和GC分析的一些常用、好用的工具。


          0x01:JDK自帶工具

          在處理內(nèi)存泄露方面JDK本身就自帶了大量監(jiān)控、分析工具,主要有如下一些:

          • jps:可查看當(dāng)前系統(tǒng)運(yùn)行的所有java進(jìn)程

          • jstat:查看具體某個(gè)Java進(jìn)程的GC情況

          • jmap: 查看某個(gè)Java進(jìn)程的堆內(nèi)存使用情況

          • jvisualvm:可視化查看堆內(nèi)存與metaspace占用情況

          • jstack:查看具體某個(gè)java進(jìn)行的線程堆棧情況


          0x02:Eclipse Memory Analyzer

          官網(wǎng)有如下一段英文介紹:

          ? ? ? The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption.

          ? ? ?Use the Memory Analyzer to analyze productive heap dumps with hundreds of millions of objects, quickly calculate the retained sizes of objects, see who is preventing the Garbage Collector from collecting objects, run a report to automatically extract leak suspects.

          大致的意思如下:

          Eclipse Memory Analyzer(簡(jiǎn)稱MAT)是一個(gè)快速且功能豐富的Java堆分析器,可幫助您查找內(nèi)存泄漏并減少內(nèi)存消耗。使用Memory Analyzer分析具有數(shù)億個(gè)對(duì)象的高效堆轉(zhuǎn)儲(chǔ),快速計(jì)算對(duì)象的保留大小,查看誰(shuí)阻止垃圾收集器收集對(duì)象,運(yùn)行報(bào)告以自動(dòng)提取泄漏嫌疑者。

          官網(wǎng)地址:https://www.eclipse.org/mat/

          這款工具在分析內(nèi)存泄露方面非常好用,可以圖形化展示通過(guò)jmap命令打印出來(lái)的內(nèi)存快照,而且是免費(fèi)的。


          0x03:JProfiler?

          JProfiler 是一個(gè)商用的主要用于檢查和跟蹤系統(tǒng)(限于Java開(kāi)發(fā)的)的性能的工具。JProfiler可以通過(guò)實(shí)時(shí)的監(jiān)控系統(tǒng)的內(nèi)存使用情況,隨時(shí)監(jiān)視垃圾回收,線程運(yùn)行狀況等手段,從而很好的監(jiān)視JVM運(yùn)行情況及其性能。專用于分析J2SE和J2EE應(yīng)用程序。它把CPU、執(zhí)行緒和內(nèi)存的剖析組合在一個(gè)強(qiáng)大的應(yīng)用中。JProfiler提供許多與IDE整合和應(yīng)用服務(wù)器整合的插件。JProfiler可視化的讓用戶可以找到效能瓶頸、抓出內(nèi)存漏失(memory leaks)、并解決執(zhí)行緒的問(wèn)題。

          官網(wǎng)地址:https://www.ej-technologies.com/products/jprofiler/overview.html

          JProfiler唯一的不好就是需要購(gòu)買(mǎi)版權(quán);但是功能還是杠杠的。


          0x04:Arthas

          首先阿里出品必屬精品,Arthas當(dāng)然也非常好用。

          Arthas是一款阿里巴巴開(kāi)源的 Java 線上診斷工具,功能非常強(qiáng)大,可以解決很多線上不方便解決的問(wèn)題。Arthas診斷使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系統(tǒng),命令還支持使用 tab 鍵對(duì)各種信息的自動(dòng)補(bǔ)全,診斷起來(lái)非常利索。

          代碼倉(cāng)庫(kù)地址:https://github.com/alibaba/arthas
          • 從官網(wǎng)可以知道Arthas有以下一些特征

          • 檢查是否加載了類,或在哪里加載了類。(對(duì)于解決jar文件沖突很有用)

          • 反編譯一個(gè)類以確保代碼按預(yù)期運(yùn)行。

          • 查看類加載器統(tǒng)計(jì)信息,例如,類加載器的數(shù)量,每個(gè)類加載器加載的類的數(shù)量,類加載器的層次結(jié)構(gòu),可能的類加載器泄漏等。

          • 查看方法調(diào)用詳細(xì)信息,例如方法參數(shù),返回對(duì)象,引發(fā)的異常等。

          • 檢查指定方法調(diào)用的堆棧跟蹤。當(dāng)開(kāi)發(fā)人員想知道所述方法的調(diào)用者時(shí),這很有用。

          • 跟蹤方法調(diào)用以查找慢速子調(diào)用。

          • 監(jiān)視方法調(diào)用統(tǒng)計(jì)信息,例如qps,rt,成功率等。

          • 監(jiān)視系統(tǒng)指標(biāo),線程狀態(tài)和cpu使用情況,gc統(tǒng)計(jì)信息等。

          • 支持命令行交互模式,并啟用了自動(dòng)完成功能。

          • 支持telnet和websocket,可通過(guò)命令行和瀏覽器啟用本地和遠(yuǎn)程診斷。

          • 支持分析器/火焰圖

          • 支持JDK 6+。

          • 支持Linux / Mac / Windows。


          0x05:操作系統(tǒng)命令

          無(wú)論怎么說(shuō),操作系統(tǒng)本身的命令是基礎(chǔ)。通過(guò)Linux本身的一些命令也是可以對(duì)java進(jìn)行一定程度的檢查與檢測(cè)的。不過(guò)根據(jù)不同的Linux版本,使用的命令可能存在一些差異,下面以CentOS為例說(shuō)明:

          • free:查看內(nèi)存占用、剩余情況

          • top:實(shí)時(shí)監(jiān)控所有進(jìn)程的內(nèi)存、CPU、IO等情況

          • lsof:該命令的功能很多,其中有一項(xiàng)功能可以查看某個(gè)進(jìn)程打開(kāi)的文件句柄情況

          Linux操作系統(tǒng)的命令非常多,涉及到內(nèi)存、io、網(wǎng)絡(luò)、磁盤(pán)等情況都可以找到相關(guān)命令來(lái)監(jiān)控。具體場(chǎng)景再去查找相關(guān)資料進(jìn)行相關(guān)處理。


          0x06:GCViewer

          GCViewer是一款實(shí)用的GC日志分析軟件,免費(fèi)開(kāi)源使用,不過(guò)需要先安裝jdk或者java環(huán)境才可以使用,因?yàn)樗旧砭褪荍ava語(yǔ)言開(kāi)發(fā)的。軟件為GC日志分析人員提供了強(qiáng)有力的功能支持,大大提高分析GC日志的效率。

          官網(wǎng)地址:https://www.tagtraum.com/gcviewer.html


          掃碼二維碼

          獲取更多精彩

          Java樂(lè)園

          有用!分享+在看?


          瀏覽 73
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天操夜夜操综合视频 | 日韩噜噜射 | 欧美艹壁 | 素人超碰11 | 免费看日皮视频 |