jmeter性能壓測-性能壓測常見問題分析之cpu過高/內存使用持續上升


基本術語解釋:

內存溢出(out of memory):是指程序在申請內存時,沒有足夠的內存空間供其使用,就會出現out of memory;內存溢出就是你要求分配的內存超出了系統能給你的,系統不能滿足需求,於是產生溢出。(程序運行時所需要的內存,超出了它可用的最大內存。)
內存泄露(memory leak):是指程序在申請內存后,無法釋放已申請的內存空間。
memory leak會最終會導致out of memory

cpu過高/內存使用持續上升分析
在處理壓力測試問題的時候,經常遇到OOM的情況,這時候我們需要去記錄內存實時的情況,一般會打出一個dump文件,然后使用內存分析工具去查看哪些對象一直占用了大量內存,最終分析出代碼需要優化的地方。

Dump文件是進程的內存鏡像。可以把程序的執行狀態通過調試器保存到dump文件中。
dump文件記錄了JVM運行期間的內存占用、線程執行等情況。常用的dump文件有heap dump和thread dump(也叫javacore,或java dump)。

heap dump記錄內存信息的,thread dump是記錄CPU信息的。
Java用如下命令打出dump文件:
jmap -dump:format=b,file=/path/heap.bin 進程ID     #所有線程的狀態都有,全部都統計
jmap -dump:live,format=b,file=/path/heap.bin 進程ID   #live的選項,實際上是產生一次Full GC來保證只看還存活的對象。
live表示我們需要抓取目前在生命周期內的內存對象,也就是說GC收不走的對象,然后我們絕大部分情況下,需要的看就是這些內存。而且會減小dump文件的大小。(慎用,因為這個命令會將沒有回收的內存手動回收一次,只留下不會被回收的。)

#zhongyong使用的
jmap -dump:format=b,file=20170307.dump 57776  #20170307.dump生成的dump文件,57776pid,生成的文件在對應服務路徑下面
strings filename                   #轉成string就可以直接查看詳情
在cmd下,輸入:java -verbose 查看jdk所在路徑,可以用自帶的jvisualvm查看內存的使用情況查看dump文件
CPU突然變高,分析問題步驟:

1.通過top命令,可以確認下,到底是哪個進程導致CPU變高,top
2.使用top -Hp pid來對該進程下的線程進行觀察。展示的pid就是對應的線程了。
3.jstack查找這個線程的信息
jstack [進程]|grep -A 10 [線程的16進制]
即: jstack 12920|grep -A 10 2600
通過該命令可以查找到當前線程的狀態

常見線程描述:
wait on monitor entry: 被阻塞的,這種情況是有問題的
runnable : 注意IO線程
in Object.wait(): 注意非線程池等待

 

 

                                                                              以上總結是基於網上查詢資料匯總所得,如有雷同,請自行理解本文為轉載自雷同文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM