亚洲一区精品自拍_2021年国内精品久久_男同十八禁gv在线观看_免费观看a级性爱黄片

Article / 文章中心

基于 PTS 壓測(cè)輕松玩轉(zhuǎn)問(wèn)題診斷

發(fā)布時(shí)間:2022-01-19 點(diǎn)擊數(shù):1095

作者:智云


01

為什么要做壓測(cè)的問(wèn)題定位?

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)行摸高的過(guò)程中,我們可以從壓測(cè)視圖或者壓測(cè)報(bào)告中看到較為全面的壓測(cè)指標(biāo),例如 QPS、RT、TPS 等,但是單純從這些指標(biāo)上,是不能很快的定位到服務(wù)端具體問(wèn)題所在的,例如,我們從全場(chǎng)景錯(cuò)誤信息中心可以看到錯(cuò)誤碼對(duì)應(yīng)的接口的響應(yīng)體,但是具體在下游的哪一環(huán)節(jié)出錯(cuò),以及錯(cuò)誤的堆棧是什么,這里單純從報(bào)告中是看不到的,而接口下游具體是哪里出錯(cuò),錯(cuò)誤堆棧是什么,正是用戶所關(guān)心的問(wèn)題。
借助問(wèn)題診斷,我們可以明確被壓接口的上下游的調(diào)用情況,同時(shí),從鏈路視圖上,我們可以看到整條鏈路所經(jīng)過(guò)的消息組件(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)問(wèn)題,還是數(shù)據(jù)庫(kù)讀寫出現(xiàn)問(wèn)題,并且能夠從調(diào)用鏈上看到對(duì)應(yīng)的報(bào)錯(cuò)堆棧,在這些信息的基礎(chǔ)上,問(wèn)題應(yīng)該去哪里定位也就比較明確了。


02

問(wèn)題診斷基本介紹和核心優(yōu)勢(shì)

Cloud Native

1 基本介紹


談到問(wèn)題診斷,用戶主要關(guān)心接入問(wèn)題診斷是否需要對(duì)應(yīng)用側(cè)代碼做一系列的改造,是否需要進(jìn)行繁雜的配置等等。PTS 提供的問(wèn)題診斷是基于 JavaAgent 的,無(wú)需用戶側(cè)做業(yè)務(wù)代碼改造,對(duì)于基于 Tomcat 的部署方式,用戶只需在啟動(dòng)腳本中添加一些必要的參數(shù)即可接入問(wèn)題診斷;對(duì)于 Kubernetes 用戶,用戶只需在 Yaml 配置文件中添加一些必要的注解即可接入問(wèn)題診斷。對(duì)于鏈路的采集規(guī)則,PTS 會(huì)提供默認(rèn)的配置,用戶也可根據(jù)自己的需要自行更改。
PTS 集成的問(wèn)題診斷在壓測(cè)過(guò)程中,針對(duì)每條請(qǐng)求,會(huì)在施壓引擎端生成 TraceId,通過(guò) TraceId 將該條請(qǐng)求所涉及到的上下游鏈路關(guān)聯(lián)起來(lái),用戶可以看到從該條請(qǐng)求作為入口到本條請(qǐng)求結(jié)束所涉及到的完整調(diào)用鏈,同時(shí),問(wèn)題診斷會(huì)針對(duì)該調(diào)用鏈生成相應(yīng)的應(yīng)用拓?fù)湟晥D,可以讓用戶清晰地看到應(yīng)用之間的調(diào)用關(guān)系。

應(yīng)用拓?fù)湟晥D

針對(duì)異常的接口,我們可以在調(diào)用鏈中看出對(duì)應(yīng)的錯(cuò)誤原因,同時(shí),用戶可以根據(jù)具體的報(bào)錯(cuò)堆棧對(duì)服務(wù)端的問(wèn)題進(jìn)行排查和優(yōu)化。壓測(cè)過(guò)程中用戶可以實(shí)時(shí)的查看指定請(qǐng)求的調(diào)用鏈,同時(shí),壓測(cè)結(jié)束之后,也可以從壓測(cè)報(bào)告中對(duì)問(wèn)題進(jìn)行回溯。
2 核心優(yōu)勢(shì)


1、零代碼侵入:針對(duì) Java 類型的服務(wù),用戶側(cè)無(wú)需進(jìn)行業(yè)務(wù)側(cè)代碼改造即可完成問(wèn)題診斷的探針接入。
2、集成度高:壓測(cè)、監(jiān)控、問(wèn)題診斷,集成在同一控制臺(tái),用戶理解和操作成本相對(duì)較低。
3、監(jiān)控指標(biāo)全:在壓測(cè)過(guò)程中,除了較為基礎(chǔ)的監(jiān)控指標(biāo)外,同時(shí)針對(duì)每個(gè)服務(wù),提供接口、機(jī)器、應(yīng)用級(jí)別的監(jiān)控。 
4、門檻低:僅需要簡(jiǎn)單配置參數(shù)即可完成問(wèn)題診斷探針接入,同時(shí)該探針還具備多協(xié)議 Mock、全鏈路壓測(cè)等功能。


03

快速玩轉(zhuǎn)問(wèn)題診斷

Cloud Native


接入問(wèn)題診斷的基本流程圖如下所示:

問(wèn)題診斷探針接入

 接入探針,并查看是否接入成功


首先,我們將被壓場(chǎng)景所涉及到的應(yīng)用梳理出來(lái),將涉及到的所有應(yīng)用按照【問(wèn)題診斷】->【探針接入[1]】文檔中的步驟進(jìn)行問(wèn)題診斷探針接入。我們可以在 PTS 控制臺(tái)的應(yīng)用配置或者應(yīng)用監(jiān)控、接口監(jiān)控、機(jī)器監(jiān)控中任選一個(gè)來(lái)查看應(yīng)用探針是否接入成功。我們本次演示的壓測(cè)場(chǎng)景涉及到五個(gè)應(yīng)用,分別是 petstore-web、petstore-user、petstore-order、petstore-catalog、petstore-cart,這以應(yīng)用監(jiān)控舉例來(lái)查看應(yīng)用是否成功接入。依次點(diǎn)擊 PTS 控制臺(tái)的【問(wèn)題診斷】->【應(yīng)用監(jiān)控[2]】->選擇我們配置的 Region 以及 Namespace,如果看到壓測(cè)場(chǎng)景涉及到的所有應(yīng)用均在該頁(yè)面,則代表應(yīng)用接入成功。

PTS 控制臺(tái)


 在壓測(cè)場(chǎng)景中打開(kāi)問(wèn)題診斷開(kāi)關(guān)


然后,我們?cè)?PTS 控制臺(tái)的【壓測(cè)中心】->【創(chuàng)建場(chǎng)景[3]】中創(chuàng)建壓測(cè)場(chǎng)景,這里可以選擇 PTS 場(chǎng)景或者 JMeter 場(chǎng)景等,這里以 PTS 場(chǎng)景為例,因?yàn)楸敬窝菔局饕球?yàn)證問(wèn)題診斷的能力,所以需要在場(chǎng)景配置中的【高級(jí)設(shè)置】中打開(kāi)問(wèn)題診斷開(kāi)關(guān)。具體的監(jiān)控采集規(guī)則,PTS 會(huì)為用戶推送默認(rèn)采集開(kāi)關(guān)打開(kāi)的配置,同時(shí),將采樣率設(shè)置為千分之一,用戶也可根據(jù)自己的需要進(jìn)行自定義。


PTS 控制臺(tái)壓測(cè)中心

 開(kāi)始?jí)簻y(cè),查看應(yīng)用監(jiān)控


完成了以上步驟,我們的壓測(cè)場(chǎng)景即具備了問(wèn)題診斷的能力。當(dāng)我們點(diǎn)擊開(kāi)始?jí)簻y(cè)之后,可以到應(yīng)用監(jiān)控、接口監(jiān)控、機(jī)器監(jiān)控中選擇我們關(guān)心的服務(wù)查看對(duì)應(yīng)的監(jiān)控情況,這里以應(yīng)用監(jiān)控[2]為例,其他類型的監(jiān)控操作步驟類似,我們選擇 petstore-user 這個(gè)服務(wù)來(lái)查看應(yīng)用監(jiān)控,如下圖所示:

壓測(cè)場(chǎng)景問(wèn)題診斷能力

 壓測(cè)結(jié)束后,查看全場(chǎng)景錯(cuò)誤信息


壓測(cè)結(jié)束后,我們需要從壓測(cè)報(bào)告中針對(duì)被壓服務(wù)端的問(wèn)題進(jìn)行排查,打開(kāi)對(duì)應(yīng)場(chǎng)景的壓測(cè)報(bào)告,具體步驟:PTS 控制臺(tái)->【壓測(cè)中心】->【報(bào)告列表[4]】,選擇對(duì)應(yīng)的壓測(cè)報(bào)告,可以從概覽頁(yè)中看到全場(chǎng)景的信息,具體如下圖所示:


PTS 控制臺(tái)

 選擇探針采樣,查看具體調(diào)用鏈情況


點(diǎn)擊【查看采樣日志】,采樣類型選擇”探針采樣“即可過(guò)濾出問(wèn)題診斷探針?biāo)杉降恼{(diào)用鏈,具體如下圖所示:


探針采樣

 查看調(diào)用鏈具體錯(cuò)誤堆棧信息,定位服務(wù)端問(wèn)題所在


篩選出來(lái)探針端采集的調(diào)用鏈之后,即可對(duì)存在問(wèn)題的接口進(jìn)行調(diào)用鏈分析,例如,商品列表的接口返回的狀態(tài)碼為 500,點(diǎn)擊查看詳情看下具體原因,如下圖所示:

應(yīng)用拓?fù)湟晥D和數(shù)據(jù)庫(kù)視圖

從調(diào)用棧中可以看到具體的報(bào)錯(cuò)原因,從而對(duì)服務(wù)端代碼進(jìn)行優(yōu)化和修復(fù)。同時(shí),可以通過(guò)應(yīng)用拓?fù)湟晥D和數(shù)據(jù)庫(kù)視圖查看服務(wù)之間的調(diào)用情況以及數(shù)據(jù)庫(kù)使用情況,這里以應(yīng)用拓?fù)湟晥D舉例,如下圖所示:


應(yīng)用拓?fù)湟晥D舉例

04

壓測(cè)報(bào)告常見(jiàn)錯(cuò)誤碼總結(jié)

Cloud Native

1 問(wèn)題診斷錯(cuò)誤碼總結(jié)
問(wèn)題診斷調(diào)用鏈路中的常見(jiàn)錯(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 語(yǔ)法等進(jìn)行檢查。

2 壓測(cè)報(bào)告錯(cuò)誤碼總結(jié)


這里針對(duì)壓測(cè)報(bào)告中常見(jiàn)的錯(cuò)誤進(jìn)行列舉,我們可以從全場(chǎng)景錯(cuò)誤信息中看到相關(guān)的錯(cuò)誤信息,具體如下:
  • 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 的配置是否有問(wèn)題。

  • 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 表示域名信息無(wú)法解析。請(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 不支持的常見(jiàn) Header 有:Connection、Keep-Alive、Proxy-Connection、Transfer-Encoding、Host、Upgrade。

05

相關(guān)鏈接

Cloud Native