訂單系統新增訂單介面負載測試效能問題及定位
http://localhost:8084/addOrder?orderName=niu&orderDesc=123&orderStatus=undelivery
get
一、假設tps上不去很低,是有什麼引起的,在程式碼中加如Thread.sleep(200); tps 會不高 ,延遲上不去,rt在800毫秒,響應時間長,通過執行緒dump定位這個問題,某個方法阻塞在哪裡。執行緒阻塞
jstack 程序號 | more 。打執行緒dump的命令 ,jstack 程序號>檔名.log (例如jstack 5328 >order.log)。用編輯器在開啟這個檔案order.log 。執行緒dump,執行緒是物件,執行緒用來跑程式的。程式呼叫鏈就是A調B,B調C,就有了一個呼叫棧,執行緒呼叫棧,這個就是由來此。多個執行緒可以處理一件事情。執行緒的名字
http-bio-8888-exec-3 這是一個tomcat的執行緒,我們的例項執行在tomcat,如果我們用jar包來啟動一個執行緒,就不有這個 http-bio-8888-exec-3 這個。我們的應用程式是執行在tomcat上的,tomcat去調util 起執行緒池,
專案指令碼
測試執行,資料收集
在伺服器上打執行緒dump檔案,jstack 599 >order.log,下載到本地檢視
二、發生頻繁fgc和報oom 堆記憶體溢位兩種情況,old區滿了以後,jstat -gcutil 程序號 1000 fugc不了 ,會導致oom,植入程式碼,Byte 定位問題
用jmap -histo 程序號 | more 檢視堆記憶體情況 第一列是數字 第二列是物件 第三列資料的大小 第四列在java虛擬機器裡類的名字,在程式裡有很多byte,記憶體空間 (934444/1024/1024=891m)。打堆dump命令
jmap -dump:live,format=b,file=dump.hprof 28920 ,用ecplise 的mat開啟 分析