性能測試常見現象之tps波動頻繁定位技巧

前言:前段時間,壓測遇到一個問題,在壓測的時候,tps波動很頻繁。html

使用xshell遠程鏈接到應用服務器,經過top命令看了下服務器資源狀況,cpu波動也很頻繁,其它服務器都正常。java

打開JvisualVM,雙擊對應的應用進程web

在這裏插入圖片描述

而後進入Sampler,在cpu波動的時候點擊cpu進行抽樣shell

在這裏插入圖片描述

抽樣進行一段時間後(通常1-2分鐘便可),點擊「stop」,而後點擊「snapshot」生成快照apache

在這裏插入圖片描述

接着按照「Total Time(CPU)」排序,看哪些線程最耗費cpu,由於咱們用的是dubbo框架,因此,咱們要分析的業務線程就是DubboServerHandler。分析的時候,咱們須要多看幾個DubboServerHandler線程,雙擊指定線程就能夠看這個線程的調用棧以及耗時狀況,看看這些線程在哪裏比較耗費cpu。服務器

在這裏插入圖片描述
經過分析發現,在Dubbo遠程調用的時候驗證參數的時間比咱們處理業務的時間還長。框架

在這裏插入圖片描述

結合Dubbo官方文檔得知,Dubbo的參數驗證這個特性是比較耗費性能的,而咱們的接口參數使用了javax.validation註解來驗證參數。
最終,咱們的調優方案是在調用的時候使用validation=「false」,即禁止使用參數驗證這個特性後,tps就平穩多了,且cpu也正常了。
Dubbo官方文檔:http://dubbo.apache.org/zh-cn/docs/user/maturity.html
svg