1. 程式人生 > >淺析軟件測試人員如何對JVM進行內存溢出檢測

淺析軟件測試人員如何對JVM進行內存溢出檢測

問題 段落 virtual 程序 ima CP 此外 系統 memory

一、什麽是JVM,檢測JVM的意義

JVM是java virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

Java語言的一個非常重要的特點就是與平臺的無關性。而使用Java虛擬機是閃現這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編譯不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用Java虛擬機屏蔽了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。這就是Java的能夠"一次編譯,到處運行"的原因。

JVM支持與操作系統無關,實現跨平臺,使得Java成為應用最廣泛的語言之一。當網站規模逐漸擴大時,為了保證性能,很有必要進行JVM內存溢出的檢測。

二、檢測工具jconsole

jconsole是jdk自帶的用於監控內存溢出的工具,該工具可以對本地代碼進行監控,也可以遠程連接服務器對JVM進行程序監控。jconsole監控內容包括內存、cpu、線程、類等,

本次根據實際工作需要,重點闡述jconsole遠程連接服務器的步驟及註意項:

在jak的bin目錄下打開Jconsole

技術分享圖片

填寫遠程服務器的IP地址和端口號,填寫用戶名、密碼

技術分享圖片

經過一段時間等待成功連上服務器,概況頁直觀展示內存、線程、類、cpu曲線圖

技術分享圖片

內存使用情況詳細圖示

技術分享圖片

線程使用情況詳細圖示

技術分享圖片

類使用情況詳細圖示

技術分享圖片

技術分享圖片

此外,還有"VM概要":顯示包括連接名稱、活動線程、堆大小、操作系統、物理內存等詳細信息;"MBean":可對左側目錄的相關屬性進行配置。

註:想對JConsole有更詳盡的了解請參考該博客:https://blog.csdn.net/lifuxiangcaohui/article/details/36896199

三、jmap的應用

通過jconsole持續監控,如在某一時間點發現性能問題時,可通過jmap命令查看內存使用情況,輸出重定向將文件導出來進行分析。輸出重定向命令:JMap -dump:format=b;file=‘文件名(自定義)‘ pid (程序的進程pid)

四、MAT工具分析

通過jmap命令將程序的內存使用情況文件導出來後,我們可以通過MAT對文件進行分析。

解壓mat

技術分享圖片

點擊mat文件夾中的MemoryAnalyzer啟動

技術分享圖片

選擇文件,點擊打開 技術分享圖片

技術分享圖片

技術分享圖片

因涉及到實際工作中java類名稱等信息了,下面就不截圖了。在頁面中如果棧、堆的調用次數差別很大,需點擊對象詳情,分析對象調用情況。如果一個對象出現多次,說明是不正常的對象引用,GC不能回收,需要反饋給開發重點關註並優化。

註:該博客地址詳細介紹了利用MAT進行內存泄漏分析https://blog.csdn.net/yxz329130952/article/details/50288145

至此,內存溢出檢測告一段落,可以將文件和mat交於開發進行性能調優。另外,mat在加載文件時,在文件目錄生成了xx_Leak_Suspects壓縮包,解壓壓縮包可以通過瀏覽器打開直觀查看分析報告。

五、總結

以上,就是JVM內存溢出檢測的大體流程。等開發進行了性能調優,可以重復以上步驟,驗證JVM性能。操作步驟如有不足,還請大家多多指教,謝謝!

淺析軟件測試人員如何對JVM進行內存溢出檢測