性能測試三十九:Jprofiler分析CPU過高和響應時間長的問題
使用Jprofiler監控分析案例
一、cpu負載過高:http://localhost:8080/PerfTeach/CpuTopServlet?id=1
cpu消耗高的可能原因
1、使用了復雜的算法,比如加密、解密
2、壓縮、解壓、序列化等操作
3、代碼bug,比如死循環
dstat監控起來,先看一下資源是否正常,用5個並發跑60秒
CPU:100%
TPS才幾百,肯定就有問題
TOP:JAVA占的CPU最多
查看進程,是tomcat
使用jprofiler查看,很明顯有個自己寫的userToString方法占了19%
打開代碼看那個方法:裏面有使用Gson對json的轉換
json轉換組件:Gson、jackson、fastjson,三個組件各有優勢,但是從從性能方面來說,Gson性能最差
所以直這個情況只能換組件,fastjson性能最好,建議使用fastjson
二、響應時間長:http://1localhost:8080/PerfTeach/TimeMonitor?id=1
使用jprofiler的方法耗時統計功能,可以統計出每個方法的耗時
50個並發,跑600秒
CPU不高
響應時間300多毫秒,有些慢了,需要優化,一般小於100毫秒,性能算是不錯的了,100--500之間,算一般的,500以上,就是很差的
由於沒有經過Nginx,所以直接查看tomcat日誌裏面的響應時間,和jmeter統計出來的差不多,網絡沒什麽問題
重新壓一下並且打開jprofiler,看看詳細分析,doCalculator方法平均耗了200毫秒,應該優化這個方法
還有一種情況也是需要優化,如doCalculator方法平均用20毫秒,但是調用次數確是其他方法的幾倍,造成耗時多
性能測試三十九:Jprofiler分析CPU過高和響應時間長的問題