日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

深入剖析:如何使用Pulsar和Arthas高效排查消息隊(duì)列延遲問題

來源: 責(zé)編: 時(shí)間:2024-04-30 08:43:05 327觀看
導(dǎo)讀背景前兩天收到業(yè)務(wù)反饋有一個(gè) topic 的分區(qū)消息堆積了:圖片根據(jù)之前的經(jīng)驗(yàn)來看,要么是業(yè)務(wù)消費(fèi)邏輯出現(xiàn)問題導(dǎo)致消費(fèi)過慢,當(dāng)然也有小概率是消息隊(duì)列的 Bug(我們使用的是 pulsar)。排查圖片通過排查,發(fā)現(xiàn)確實(shí)是在一點(diǎn)多的時(shí)

背景

前兩天收到業(yè)務(wù)反饋有一個(gè) topic 的分區(qū)消息堆積了:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

根據(jù)之前的經(jīng)驗(yàn)來看,要么是業(yè)務(wù)消費(fèi)邏輯出現(xiàn)問題導(dǎo)致消費(fèi)過慢,當(dāng)然也有小概率是消息隊(duì)列的 Bug(我們使用的是 pulsar)。RYF28資訊網(wǎng)——每日最新資訊28at.com

排查

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

通過排查,發(fā)現(xiàn)確實(shí)是在一點(diǎn)多的時(shí)候消息堆積了(后面是修復(fù)之后堆積開始下降)。RYF28資訊網(wǎng)——每日最新資訊28at.com

于是我在剛才堆積處查看了一條堆積消息的列表:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

獲取到其中一條消息的 messageId.RYF28資訊網(wǎng)——每日最新資訊28at.com

這里本質(zhì)上使用的是 pulsar-admin 的 API。org.apache.pulsar.client.admin.Topics#peekMessagesRYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

再通過這條消息的 id (為了演示,這里的 messageId 可能不一樣)在我們的 pulsar 消息鏈路系統(tǒng)中找到了消息的發(fā)送鏈路:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

通過這個(gè)鏈路會(huì)發(fā)現(xiàn)消息一直在推送,但就是沒有收到客戶端的 ACK 響應(yīng)。RYF28資訊網(wǎng)——每日最新資訊28at.com

相關(guān)的消息鏈路埋點(diǎn)可以參考這里:如何編寫一個(gè) Pulsar Broker Interceptor 插件RYF28資訊網(wǎng)——每日最新資訊28at.com

簡單來說就是在以下幾個(gè) broker 提供的攔截器接口加上埋點(diǎn)數(shù)據(jù)即可:RYF28資訊網(wǎng)——每日最新資訊28at.com

  • messageProduced
  • messageDispatched
  • messageAcked

既然知道了是客戶端沒有響應(yīng) ACK,那就得知道客戶端此時(shí)在干什么。RYF28資訊網(wǎng)——每日最新資訊28at.com

首先排查了 JVM 內(nèi)存、CPU 等監(jiān)控情況,發(fā)現(xiàn)一切都挺正常的,這段時(shí)間沒有明顯的尖刺。RYF28資訊網(wǎng)——每日最新資訊28at.com

Arthas 排查

于是便準(zhǔn)備使用 arthas 查看下線程的運(yùn)行情況。RYF28資訊網(wǎng)——每日最新資訊28at.com

我們進(jìn)入到對(duì)應(yīng) Pod 的容器,執(zhí)行:RYF28資訊網(wǎng)——每日最新資訊28at.com

java -jar arthas-boot.jar

因?yàn)?JVM 內(nèi)存都沒有啥異常,所以先看看 thread 的運(yùn)行堆棧,考慮到是 pulsar 消費(fèi)線程卡住了,所以我們需要加上線程狀態(tài)已經(jīng)過濾下線程的名稱:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

thread --state WAITING | grep pulsar

此時(shí)就會(huì)列出當(dāng)前 Java 進(jìn)程中狀態(tài)為 WATING 并且線程名稱以 pulsar 開頭的線程。RYF28資訊網(wǎng)——每日最新資訊28at.com

我在之前的文章 從 Pulsar Client 的原理到它的監(jiān)控面板 中分析過客戶端的原理。RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

可以知道 pulsar 客戶端在其中使用的是 pulsar-打頭的線程名稱,所以這樣就列出了我們需要重點(diǎn)關(guān)注的線程。RYF28資訊網(wǎng)——每日最新資訊28at.com

我們以圖中列出的線程 Id:320 為例:RYF28資訊網(wǎng)——每日最新資訊28at.com

thread 320

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

此時(shí)便會(huì)打印當(dāng)前線程的堆棧。RYF28資訊網(wǎng)——每日最新資訊28at.com

從上述堆棧中會(huì)發(fā)現(xiàn)線程一直處于 IO 操作中,看起來是在操作數(shù)據(jù)庫。RYF28資訊網(wǎng)——每日最新資訊28at.com

我們再往下翻一翻,會(huì)發(fā)現(xiàn)上層調(diào)用的業(yè)務(wù)代碼:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

查閱代碼得知這是一個(gè)數(shù)據(jù)庫的寫入操作,看起來是在這個(gè)環(huán)節(jié)數(shù)據(jù)庫響應(yīng)過慢導(dǎo)致的 pulsar 線程被阻塞了;從而導(dǎo)致消息沒有及時(shí) ACK。RYF28資訊網(wǎng)——每日最新資訊28at.com

為了最終確認(rèn)是否由數(shù)據(jù)庫引起的,于是繼續(xù)查詢了當(dāng)前應(yīng)用的慢 SQL 情況:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

發(fā)現(xiàn)其中有一個(gè)查詢語句調(diào)用頻次和平均耗時(shí)都比較高,而且正好這個(gè)表也是剛才在堆棧里操作的那張表。RYF28資訊網(wǎng)——每日最新資訊28at.com

經(jīng)過業(yè)務(wù)排查發(fā)現(xiàn)這個(gè)慢 SQL 是由一個(gè)定時(shí)任務(wù)觸發(fā)的,而這個(gè)定時(shí)任務(wù)由于某些原因一直也沒有停止,所以為了快速解決這個(gè)問題,我們先嘗試將這個(gè)定時(shí)任務(wù)停掉。RYF28資訊網(wǎng)——每日最新資訊28at.com

果然停掉沒多久后消息就開始快速消費(fèi)了:RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

從這個(gè)時(shí)間線也可以看得出來了,在服務(wù)端推送了多次之后終于收到了 ACK。RYF28資訊網(wǎng)——每日最新資訊28at.com

修復(fù)之后業(yè)務(wù)再去排查優(yōu)化這個(gè)慢 SQL,這樣這個(gè)問題就得到根本的解決了。RYF28資訊網(wǎng)——每日最新資訊28at.com

更多好用技巧

當(dāng)然 arthas 好用的功能還遠(yuǎn)不止此,我覺得還有以下功能比較好用:RYF28資訊網(wǎng)——每日最新資訊28at.com

火焰圖

profile:可以輸出火焰圖,在做性能分析的時(shí)候非常有用。RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

動(dòng)態(tài)修改內(nèi)存數(shù)據(jù)

還記得之前我們碰到過一個(gè) pulsar 刪除 topic 的 Bug,雖然最終修復(fù)了問題,但是在發(fā)布修復(fù)版本的時(shí)候?yàn)榱吮苊庠俅斡|發(fā)老版本的 bug,需要在內(nèi)存中將某個(gè)關(guān)鍵字段的值修改掉。RYF28資訊網(wǎng)——每日最新資訊28at.com

而且是不能重啟應(yīng)用的情況下修改,此時(shí)使用 arthas 就非常的方便:RYF28資訊網(wǎng)——每日最新資訊28at.com

curl -O https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar 1 -c "vmtool -x 3 --action getInstances --className org.apache.pulsar.broker.ServiceConfiguration  --express 'instances[0].setTopicLevelPoliciesEnabled(false)'"

這里使用的是 vmtool 這個(gè)子命令來獲取對(duì)象,最終再使用 express 表達(dá)式將其中的值改為了 false。RYF28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然這是一個(gè)高危操作,不到萬不得已不推薦這么使用。RYF28資訊網(wǎng)——每日最新資訊28at.com

Arthas Tunnel & Web Console

這是一個(gè)方便開發(fā)者通過網(wǎng)頁就可以連接到 arthas 的功能,避免直接登錄到服務(wù)器進(jìn)行操作。RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

我們在研效普通也內(nèi)置了該功能,讓開發(fā)排查問題更加方便。RYF28資訊網(wǎng)——每日最新資訊28at.com

CPU 使用過多

cpu 異常使用排查也是一個(gè)非常有用的功能,雖然我們可以通過監(jiān)控得知 JVM 的 cpu 使用情況,但是沒法知道具體是哪個(gè)線程以及哪行代碼造成的 cpu 過高。RYF28資訊網(wǎng)——每日最新資訊28at.com

thread -n 3

圖片圖片RYF28資訊網(wǎng)——每日最新資訊28at.com

使用以上命令就可以將 cpu 排名前三的線程打印出來,并且列出他的堆棧情況,這樣可以很直觀的得知 cpu 消耗了在哪些地方了。RYF28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然還有一些 trace 查詢:RYF28資訊網(wǎng)——每日最新資訊28at.com

trace demo.MathGame run '#cost > 10'

比如這是將調(diào)用超過 10ms 的函數(shù)打印出來,不過如果我們接入了可觀測系統(tǒng)(OpenTelemetry、skywalking等)這個(gè)功能就用不太上了。RYF28資訊網(wǎng)——每日最新資訊28at.com

還可以在運(yùn)行的時(shí)候不停機(jī)修改日志級(jí)別,這種在線上排查一些疑難雜癥的時(shí)候非常好用(通常情況下 debug 日志是不打印的),我們可以將日志級(jí)別調(diào)整為 debug 打印出更加詳細(xì)的信息:RYF28資訊網(wǎng)——每日最新資訊28at.com

[arthas@2062]$ logger --name ROOT --level debugupdate logger level success.

如果是在 kubernetes 環(huán)境中執(zhí)行也有可能碰到 Java 進(jìn)程啟動(dòng)后沒有在磁盤中寫入 PID 的情況:RYF28資訊網(wǎng)——每日最新資訊28at.com

$ java -jar arthas-boot.jar  [INFO] arthas-boot version: 3.6.7  [INFO] Can not find java process. Try to pass <pid> in command line.  Please select an available pid.

導(dǎo)致直接運(yùn)行的時(shí)候無法找到 Java 進(jìn)程;此時(shí)就需要先 ps 拿到 PID 之后再傳入 PID 連入 arthas:RYF28資訊網(wǎng)——每日最新資訊28at.com

$ java -jar arthas-boot.jar 1

更多關(guān)于 arthas 的用法可以參考官網(wǎng)。RYF28資訊網(wǎng)——每日最新資訊28at.com

參考鏈接:RYF28資訊網(wǎng)——每日最新資訊28at.com

  • https://pulsar.apache.org/docs/3.2.x/admin-api-topics/#peek-messages
  • https://crossoverjie.top/2023/12/11/ob/Pulsar-Broker-Interceptor/
  • https://arthas.aliyun.com/
  • https://crossoverjie.top/2024/01/09/ob/Pulsar-Delete-Topic/

本文鏈接:http://www.www897cc.com/showinfo-26-86685-0.html深入剖析:如何使用Pulsar和Arthas高效排查消息隊(duì)列延遲問題

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 一種避免寫大量CRUD方法的新思路

下一篇: 太優(yōu)雅了!Rust 200 行代碼實(shí)現(xiàn)表達(dá)式解析

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 十個(gè)可以手動(dòng)編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會(huì)很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對(duì)它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • K8S | Service服務(wù)發(fā)現(xiàn)

    一、背景在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會(huì)開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;圖片對(duì)于測試「Tes」環(huán)境或者
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓(xùn)練穩(wěn)定性問題,分析了造成訓(xùn)練穩(wěn)定性存在問題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對(duì)象、數(shù)組等,只要不斷地創(chuàng)建這些對(duì)象,并且保證 GC Roots 到對(duì)象之間有可達(dá)路徑來避免垃 圾收集回收機(jī)制清除這些對(duì)象,當(dāng)這些對(duì)象所占空間超過
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評(píng)論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會(huì)上,幾個(gè)財(cái)經(jīng)圈媒體大佬就&ldquo;胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道&rdquo;展開討論。有
  • 認(rèn)真聊聊東方甄選:如何告別低垂的果實(shí)

    來源:山核桃作者:財(cái)經(jīng)無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關(guān)心的&ldquo;網(wǎng)紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內(nèi)直播,
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷售價(jià)2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強(qiáng)悍登場,限時(shí)售價(jià)3099元起;價(jià)位段最強(qiáng)性能手機(jī)iQOO Neo8同期上市
  • 聯(lián)想YOGA 16s 2022筆記本將要推出,屏幕支持觸控功能

    聯(lián)想此前宣布,將于11月2日19:30召開聯(lián)想秋季輕薄新品發(fā)布會(huì),推出聯(lián)想 YOGA 16s 2022 筆記本等新品。官方稱,YOGA 16s 2022 筆記本將搭載 16 英寸屏幕,并且是一
Top 主站蜘蛛池模板: 河津市| 平武县| 屯昌县| 简阳市| 福州市| 梅州市| 武平县| 寿阳县| 石屏县| 龙里县| 岳西县| 中卫市| 垫江县| 万载县| 浏阳市| 马公市| 菏泽市| 会理县| SHOW| 呼玛县| 石屏县| 桂林市| 且末县| 河北区| 襄垣县| 宁阳县| 宿迁市| 临朐县| 泗水县| 临猗县| 贺州市| 汶川县| 大同市| 永清县| 西和县| 南漳县| 江川县| 宁化县| 崇义县| 益阳市| 图木舒克市|