国产精品chinese,色综合天天综合精品网国产在线,成午夜免费视频在线观看,清纯女学生被强行糟蹋小说

    <td id="ojr13"><tr id="ojr13"><label id="ojr13"></label></tr></td>
        • <source id="ojr13"></source>
            <td id="ojr13"><ins id="ojr13"><label id="ojr13"></label></ins></td>

            當(dāng)前位置:文章中心>技術(shù)教程
            公告通知 新聞快遞 技術(shù)教程 產(chǎn)品展示

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

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

            作者:智云


            01

            為什么要做壓測(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)該去哪里定位也就比較明確了。


            02

            問題診斷基本介紹和核心優(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)系。

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

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


            03

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

            Cloud Native


            接入問題診斷的基本流程圖如下所示:

            問題診斷探針接入

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


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

            PTS 控制臺(tái)


             在壓測(cè)場(chǎng)景中打開問題診斷開關(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)證問題診斷的能力,所以需要在場(chǎng)景配置中的【高級(jí)設(shè)置】中打開問題診斷開關(guān)。具體的監(jiān)控采集規(guī)則,PTS 會(huì)為用戶推送默認(rèn)采集開關(guān)打開的配置,同時(shí),將采樣率設(shè)置為千分之一,用戶也可根據(jù)自己的需要進(jìn)行自定義。


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

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


            完成了以上步驟,我們的壓測(cè)場(chǎng)景即具備了問題診斷的能力。當(dāng)我們點(diǎn)擊開始?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ù)來查看應(yīng)用監(jiān)控,如下圖所示:

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

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


            壓測(cè)結(jié)束后,我們需要從壓測(cè)報(bào)告中針對(duì)被壓服務(wù)端的問題進(jìn)行排查,打開對(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)擊【查看采樣日志】,采樣類型選擇”探針采樣“即可過濾出問題診斷探針?biāo)杉降恼{(diào)用鏈,具體如下圖所示:


            探針采樣

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


            篩選出來探針端采集的調(diào)用鏈之后,即可對(duì)存在問題的接口進(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í),可以通過應(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)告常見錯(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é)


            這里針對(duì)壓測(cè)報(bào)告中常見的錯(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 的配置是否有問題。

            • 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