基于 PTS 壓測輕松玩轉(zhuǎn)問題診斷
發(fā)布時間:2022-01-19 點擊數(shù):989
作者:智云
為什么要做壓測的問題定位?
Cloud Native
性能測試 PTS(Performance Testing Service)是具備強大的分布式壓測能力的 SaaS 壓測平臺,可模擬海量用戶的真實業(yè)務(wù)場景,全方位驗證業(yè)務(wù)站點的性能、容量和穩(wěn)定性。
在不斷的對被壓服務(wù)端水位進行摸高的過程中,我們可以從壓測視圖或者壓測報告中看到較為全面的壓測指標(biāo),例如 QPS、RT、TPS 等,但是單純從這些指標(biāo)上,是不能很快的定位到服務(wù)端具體問題所在的,例如,我們從全場景錯誤信息中心可以看到錯誤碼對應(yīng)的接口的響應(yīng)體,但是具體在下游的哪一環(huán)節(jié)出錯,以及錯誤的堆棧是什么,這里單純從報告中是看不到的,而接口下游具體是哪里出錯,錯誤堆棧是什么,正是用戶所關(guān)心的問題。
借助問題診斷,我們可以明確被壓接口的上下游的調(diào)用情況,同時,從鏈路視圖上,我們可以看到整條鏈路所經(jīng)過的消息組件(Kafka、RocketMQ 等)、緩存(Redis、MongoDB 等)、數(shù)據(jù)庫(MySQL、Oracle 等)、RPC 調(diào)用(Feign、Dubbo、HttpClient 等),例如,某個接口出現(xiàn)狀態(tài)碼異?;蛘咂渌腻e誤,那么,我們可以從調(diào)用鏈上看到到底是 Rpc 調(diào)用出現(xiàn)問題,還是數(shù)據(jù)庫讀寫出現(xiàn)問題,并且能夠從調(diào)用鏈上看到對應(yīng)的報錯堆棧,在這些信息的基礎(chǔ)上,問題應(yīng)該去哪里定位也就比較明確了。
問題診斷基本介紹和核心優(yōu)勢
Cloud Native
1 基本介紹
談到問題診斷,用戶主要關(guān)心接入問題診斷是否需要對應(yīng)用側(cè)代碼做一系列的改造,是否需要進行繁雜的配置等等。PTS 提供的問題診斷是基于 JavaAgent 的,無需用戶側(cè)做業(yè)務(wù)代碼改造,對于基于 Tomcat 的部署方式,用戶只需在啟動腳本中添加一些必要的參數(shù)即可接入問題診斷;對于 Kubernetes 用戶,用戶只需在 Yaml 配置文件中添加一些必要的注解即可接入問題診斷。對于鏈路的采集規(guī)則,PTS 會提供默認(rèn)的配置,用戶也可根據(jù)自己的需要自行更改。
PTS 集成的問題診斷在壓測過程中,針對每條請求,會在施壓引擎端生成 TraceId,通過 TraceId 將該條請求所涉及到的上下游鏈路關(guān)聯(lián)起來,用戶可以看到從該條請求作為入口到本條請求結(jié)束所涉及到的完整調(diào)用鏈,同時,問題診斷會針對該調(diào)用鏈生成相應(yīng)的應(yīng)用拓?fù)湟晥D,可以讓用戶清晰地看到應(yīng)用之間的調(diào)用關(guān)系。
2 核心優(yōu)勢
1、零代碼侵入:針對 Java 類型的服務(wù),用戶側(cè)無需進行業(yè)務(wù)側(cè)代碼改造即可完成問題診斷的探針接入。
2、集成度高:壓測、監(jiān)控、問題診斷,集成在同一控制臺,用戶理解和操作成本相對較低。
3、監(jiān)控指標(biāo)全:在壓測過程中,除了較為基礎(chǔ)的監(jiān)控指標(biāo)外,同時針對每個服務(wù),提供接口、機器、應(yīng)用級別的監(jiān)控。
4、門檻低:僅需要簡單配置參數(shù)即可完成問題診斷探針接入,同時該探針還具備多協(xié)議 Mock、全鏈路壓測等功能。
快速玩轉(zhuǎn)問題診斷
Cloud Native
壓測報告常見錯誤碼總結(jié)
Cloud Native
1 問題診斷錯誤碼總結(jié)問題診斷調(diào)用鏈路中的常見錯誤碼進行總結(jié),具體如下:
- java.lang.NullPointerException:服務(wù)端空指針,具體可根據(jù)調(diào)用鏈中的錯誤堆棧對服務(wù)端的代碼進行排查。
-
- com.microsoft.sqlserver.jdbc.SQLServerException:服務(wù)端 SQL 報錯,可根據(jù)調(diào)用鏈采集的堆棧信息對服務(wù)端 SQL 語法等進行檢查。
2 壓測報告錯誤碼總結(jié)
- class java.net.SocketTimeoutException:null 表示請求在等待響應(yīng)或者讀取中途(idle)超時。請檢查服務(wù)端健康狀況或者 PTS 的壓測 API 超時時間的設(shè)置是否合理,另外還有可能是服務(wù)端處理能力出現(xiàn)瓶頸。
- class java.net.ConnectException:null 表示請求在與遠(yuǎn)端(被壓測端)建立 TCP 連接時就出現(xiàn)失敗或者被遠(yuǎn)端拒絕。請檢查服務(wù)端健康狀況,或者是網(wǎng)絡(luò)連接層是否有瓶頸。
- class java.util.concurrent.TimeoutException:null 表示請求在與遠(yuǎn)端(被壓測端)建立 TCP 連接時就出現(xiàn)失敗或者被遠(yuǎn)端拒絕。請檢查服務(wù)端健康狀況,或者是網(wǎng)絡(luò)連接層是否有瓶頸。
- class org.apache.http.ConnectionClosedException:Connection closed 表示連接異常關(guān)閉,服務(wù)端主動關(guān)閉了連接。
- class java.io.IOException:Connection reset by peer 表示連接被重置。若使用了 SLB,請查看 SLB 的配置是否有問題。
- class org.apache.http.ConnectionClosedException:Connection closed unexpectedly 表示數(shù)據(jù)尚未接收完畢,連接就已關(guān)閉??赡芊?wù)端未及時響應(yīng)或者提前終止調(diào)試或壓測。
- class java.lang.RuntimeException:java.net.UnknownHostException 表示域名信息無法解析。請檢查域名是否已經(jīng)正常注冊并可以解析、未注冊的域名是否已進行域名綁定。
- class org.apache.hc.core5.http.ProtocolException:Header 'key: value' is illegal for HTTP/2 messages 表示在服務(wù)端優(yōu)先使用 HTTP2 協(xié)議的情況下,場景配置了 HTTP2 協(xié)議不支持的 Header,請移除相應(yīng)Header后重試。HTTP2 不支持的常見 Header 有:Connection、Keep-Alive、Proxy-Connection、Transfer-Encoding、Host、Upgrade。
05
相關(guān)鏈接
Cloud Native