成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

消費者太多!RocketMQ又炸了!

開發 前端
大對象的定位,一般來說需要dump看看,不過這個對象有點特殊,剛剛也提到了它會被持久化到文件中,所以直接看文件大小和內容就行了。

1、問題現象

先說明下RocketMQ版本, 4.6.0的老版本了。

線下環境客戶端啟動會頻繁報錯響應超時,導致consumer實例化失敗,無法啟動應用。

圖片圖片

2、排查

確認線下環境RocketMQ集群流量、生產消費數量無異常。

集群gc次數不多,但是耗時高。(原本監控看板異常數據缺失,所以少了前面一段)

圖片圖片

master節點cpu使用率、load極高。

圖片圖片

升配,4c8g升級8c32g,擴大jvm內存。

系統指標略有下降,但是客戶端異常沒有明顯改善。

只能進一步排查根因,還得上arthas。

thread -n 3

查看cpu高的線程在做什么。

發現兩個異常線程。

1)一個線程在執行AdminBrokerProcessor.queryTopicConsumerByWho()。

圖片圖片

這個是查詢Topic的conusmerGroup信息。

比較奇怪的是,這個請求很頻繁,后來發現是控制臺應用dashboard有個定時任務,30s查詢一次。

這個請求的耗時主要是在數組的遍歷處理上,說明內存中的數據非常大。

圖片圖片

而這個源碼中的offsetTable,就是RocketMQ中保存consumerGroup位點信息的對象。它的key是topic@group拼接的。

圖片圖片

先臨時處理,把dashboard應用關閉了,減少請求。但是效果并不明顯。

2)另一個線程在執行定時任務ConsumerOffsetManager.persist()。

(線程調用信息忘記截圖了)

這個是RocketMQ集群持久化consumerGroup的offset信息的定時任務。

圖片圖片

會將整個內存對象轉化為jsonString寫入磁盤文件中。

這個內存對象就是前面提到的offsetTable,就是RocketMQ中保存consumerGroup位點信息的對象。

這里消耗資源多,還是說明我們的內存對象非常大。

因為是線下環境,可靠性要求不高。所以先臨時處理,把定時任務默認配置5s改成50s,減少持久化次數。

效果顯著,機器cpu、負載都明顯改善。

好了,現在問題的矛頭都指向了這個offsetTable,那它到底有多大,為什么這么大?

3、定位根因

3.1 直接原因

大對象的定位,一般來說需要dump看看,不過這個對象有點特殊,剛剛也提到了它會被持久化到文件中,所以直接看文件大小和內容就行了。

持久化文件的配置路徑,可以看下啟動的conf.properties

storePathRootDir=/usr/local/rocketmq/store1
storePathCommitLog=/usr/local/rocketmq/store1/commitlog
storePathConsumerQueue=/usr/local/rocketmq/store1/consumequeue
storePathIndex=/usr/local/rocketmq/store1/index

在/usr/local/rocketmq/store1目錄下找到config文件夾的consummerOffset.json文件,44M,amazing~

對一個幾十M的對象頻繁序列化和持久化,加上內網磁盤比較差,難怪負載如此高。

圖片圖片

(這里截圖是當時應急時備份的文件,新的文件目前是414K)

3.2 根本原因

為什么這個內存對象這么大呢?

查看了下文件內容,是RocketMQ中保存consumerGroup位點信息的對象,它的key是topic@group拼接的。

我們發現大量奇怪的consumerGroup name,跟一個topic聯合產生了幾千個key。

查看了下內部封裝的客戶端代碼,找到了罪魁禍首。

圖片圖片

線下環境會根據小環境(比如自己起的測試、單測環境、CI測試環境等)拼接一個獨立的consumerGroup name。

在線下,每次CI的測試環境名字會變化,所以導致consumerGroup name數量急劇膨脹。

4、優化

問題找到了,直接的解決方式是刪除文件中無用的consumerGroup name,重啟broker進行加載。

由于是線下環境,不需要擔心位點丟失的問題,同時當客戶端請求時會自動創建新的位點信息,所以可以考慮直接刪除。

圖片圖片

先停止broker進程(否則會自動落盤內存數據,創建新的文件),然后重命名相關文件(用于備份回滾),重新啟動broker進程,讀取空文件加載空對象。

重啟后,各個客戶端在請求集群時,會自動創建訂閱關系和消費位點記錄,負載略有升高,然后就恢復到較低的負載水位了。

24h的監控顯示,優化效果顯著,整個機器負載降低,請求讀寫耗時也顯著降低。

圖片圖片

注意:保存訂閱關系的subscriptionGroup.json也存在同樣consumerGroup過多導致膨脹的問題,同樣的原因和優化方式。默認訂閱關系也是會自動創建的。這里就不展開贅述了。

5、擴展一下

如果類似的問題出在線上怎么辦?

事后來看,類似問題是能夠提前避免的,主要考慮兩個措施:

  • 要做好持久化文件(對應內存對象)大小監控,避免出現內存大對象。如果發現異常增長,必須提前排查處理。
  • 磁盤要足夠好,使用SSD是基本要求,避免頻繁刷盤導致負載升高。
責任編輯:武曉燕 來源: 阿丸筆記
相關推薦

2024-04-22 00:00:00

RocketMQ優化位點

2023-03-27 09:50:16

RocketMQ中間件

2022-07-07 09:00:49

RocketMQ消費者消息消費

2022-03-14 11:05:01

RocketMQRedis緩存

2021-07-12 10:25:03

RocketMQ數據結構kafka

2022-11-08 07:36:17

RocketMQ消費者消息堆積

2022-05-09 11:15:05

RocketMQPULL 模式PUSH 模式

2023-06-01 08:08:38

kafka消費者分區策略

2023-03-28 07:08:09

RocketMQ消費者堆棧

2015-08-26 09:39:30

java消費者

2011-08-05 16:21:24

2011-07-22 16:25:38

CA TechnoloIT消費化

2009-08-13 13:14:31

C#生產者和消費者

2023-01-29 08:46:08

2021-02-02 09:13:11

索引SQL數據庫

2021-12-22 11:00:05

模型Golang語言

2015-06-15 11:29:34

數據中心綠色數據中心

2015-08-31 10:45:02

數據

2009-04-15 11:17:23

2018-05-16 23:37:55

攜號轉網運營商網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩免费在线 | 成年人在线观看视频 | 久久99精品国产99久久6男男 | 国产亚洲一区二区精品 | 色眯眯视频在线观看 | 欧美在线一区二区三区 | 超碰在线人人 | 91国在线观看 | 91亚洲一区| 久久久国产精品 | 日本国产欧美 | 国产精品视频偷伦精品视频 | 97在线观看 | 美女高潮网站 | 97色免费视频 | 国产日韩欧美 | 欧美九九| 中文字幕亚洲一区二区va在线 | 黄色大片毛片 | 国产在线观看一区二区 | 毛片免费视频 | 视频三区| 成人午夜在线 | 欧美日韩在线免费 | 国产福利一区二区 | 国产精品一区二 | 91在线看| 久草新在线 | 日日夜夜天天 | 在线2区 | 中文字幕在线观看一区二区 | 亚洲va国产日韩欧美精品色婷婷 | 搞黄网站在线观看 | 久久一级大片 | 一区二区av| 国产精品一区二区电影 | 国产小视频精品 | 欧美h视频| 国产精品美女久久久久久久久久久 | 夜夜夜夜草| 久久99国产精品 |