性能測試如何定位(思路)
背景:上一篇寫了一個如何開展測試,這篇就補充下如何定位性能問題,權當是一種思路;
思路如下:(從前到后,從表象到內部)
- 首先排除壓力機自身的問題,如CPU、內存、網絡、腳本、應用環境等問題;
- 監控中間件的訪問日志,觀察響應時間,大體確定耗時處于哪一個階段(把范圍縮小);
- 排查網絡問題,監控壓力機到后端服務的網絡,以及各服務間的網絡,是否達到網絡上線(網絡問題一般不會出現,但是容易被忽略,條件允許的話,性能測試的網路獨立);
- 監控服務端所有機器的操作系統負載,如CPU,內存,磁盤,網絡是否達到瓶頸(這塊主要監控應用服務器和數據庫服務器操作系統級別的);
- 監控應用服務的日志,查看是否有ERROR,或者timeout級別的報錯(主要打開部署應用,動態監控);
- 監控中間件的連接數,如Nginx、tomcat、MySQL 是否達到上限(目前項目中我就是查看了MySQL的連接數:show variables like '%connections%'和show status like '%thread%')
- 監控應用程序線程狀態,使用jstack和jvisualvm查看是否有死鎖、阻塞情況;(監控的方法關注后面的blog);
- 監控應用程序的jvm,使用jstat和jmap查看GC情況,是否有內存泄漏情況;
- 使用jprofiler監控應用程序,可以查看耗時時間比較長的代碼(這個工具需要破解,在公司慎重使用,萬一被安排上了,哈哈)
- 監控數據庫,是否有慢查詢,一般數據庫cpu過高的原因都是慢查詢(這個一般阿里云會提供這種服務,可以隨時監控);
- 監控數據庫執行計劃,是否有全表掃描,以及索引不生效的情況;
- 檢查系統是否有外部依賴情況,如果外部依賴性能很差,也會造成性能低下(這此壓測主要的問題,就是因為外部依賴性能差的原因);
- 對于不好定位的問題,可以采用模塊隔離的方法來確定問題
- ps :以上的思路都是理論,如何實踐,還需要做項目時,親自體會

浙公網安備 33010602011771號