Java虛擬機器統計監控工具jstat(Java Virtual Machine statistics monitoring tool)。
首先,我們得明確一下jstat的作用:對JVM進行統計監控,並且是實時的。那麼監控java虛擬機器的哪些資料呢?
我們先看看jstat是如何使用的,linux下執行:
再看看有哪些options:
舉例說明之(其他引數大家可以自己實際練習看看都輸出哪些資料):
看這一大堆數字,煩不煩?惡不噁心?有看下去的心情嗎?透過這些資料來快速分析記憶體洩漏問題能快速起來嗎?
上面是對jstat的一個的基本介紹,大家應該可以看出來,想透過jstat去監控記憶體健康狀態是沒問題的,但是也得清楚的瞭解JVM的相關知識,要搞清楚年輕代、永久代、YGC、FGC,並根據這些資料來判斷是否有記憶體洩漏的問題或者風險。
這裡,我建議的方法是:
如果你覺得你的應用有記憶體洩漏的問題,那麼千萬別重啟或者停止應用,要保留第一現場(這是第一步,第一步沒有了就等下一次記憶體洩漏吧~可以考慮透過slb把這臺機器摘掉,避免影響使用者)
用java自帶的工具jmap dump現場檔案: jmap -dump:format=b,file=heap.bin <pid>
用MAT工具分析heap dump檔案,現場檔案拿到手了,剩下的就是學會使用MAT分析檔案了,其實也不用你分析,需要做的事情MAT都幫你做好了,透過MAT即可分析出吃記憶體的物件是什麼了,這樣就可以定位到記憶體洩漏的問題了。
Java虛擬機器統計監控工具jstat(Java Virtual Machine statistics monitoring tool)。
首先,我們得明確一下jstat的作用:對JVM進行統計監控,並且是實時的。那麼監控java虛擬機器的哪些資料呢?
我們先看看jstat是如何使用的,linux下執行:
jstat -helpjstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]再看看有哪些options:
jstat -options舉例說明之(其他引數大家可以自己實際練習看看都輸出哪些資料):
jstat -gc -t -h10 27691 2000 10看這一大堆數字,煩不煩?惡不噁心?有看下去的心情嗎?透過這些資料來快速分析記憶體洩漏問題能快速起來嗎?
上面是對jstat的一個的基本介紹,大家應該可以看出來,想透過jstat去監控記憶體健康狀態是沒問題的,但是也得清楚的瞭解JVM的相關知識,要搞清楚年輕代、永久代、YGC、FGC,並根據這些資料來判斷是否有記憶體洩漏的問題或者風險。
這裡,我建議的方法是:
如果你覺得你的應用有記憶體洩漏的問題,那麼千萬別重啟或者停止應用,要保留第一現場(這是第一步,第一步沒有了就等下一次記憶體洩漏吧~可以考慮透過slb把這臺機器摘掉,避免影響使用者)
用java自帶的工具jmap dump現場檔案: jmap -dump:format=b,file=heap.bin <pid>
用MAT工具分析heap dump檔案,現場檔案拿到手了,剩下的就是學會使用MAT分析檔案了,其實也不用你分析,需要做的事情MAT都幫你做好了,透過MAT即可分析出吃記憶體的物件是什麼了,這樣就可以定位到記憶體洩漏的問題了。