国产精品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>

            Article / 文章中心

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

            發(fā)布時間:2022-01-19 點擊數(shù):989

            作者:智云


            01

            為什么要做壓測的問題定位?

            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)該去哪里定位也就比較明確了。


            02

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

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

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


            03

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

            Cloud Native


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

            問題診斷探針接入

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


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

            PTS 控制臺


             在壓測場景中打開問題診斷開關(guān)


            然后,我們在 PTS 控制臺的【壓測中心】->【創(chuàng)建場景[3]】中創(chuàng)建壓測場景,這里可以選擇 PTS 場景或者 JMeter 場景等,這里以 PTS 場景為例,因為本次演示主要是驗證問題診斷的能力,所以需要在場景配置中的【高級設(shè)置】中打開問題診斷開關(guān)。具體的監(jiān)控采集規(guī)則,PTS 會為用戶推送默認(rèn)采集開關(guān)打開的配置,同時,將采樣率設(shè)置為千分之一,用戶也可根據(jù)自己的需要進行自定義。


            PTS 控制臺壓測中心

             開始壓測,查看應(yīng)用監(jiān)控


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

            壓測場景問題診斷能力

             壓測結(jié)束后,查看全場景錯誤信息


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


            PTS 控制臺

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


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


            探針采樣

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


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

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

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


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

            04

            壓測報告常見錯誤碼總結(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é)


            這里針對壓測報告中常見的錯誤進行列舉,我們可以從全場景錯誤信息中看到相關(guān)的錯誤信息,具體如下:
            • 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