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