Codis 千萬併發下調優

2021-09-22 05:21:26 字數 2300 閱讀 6235

環境:

8臺機器

32c 256g,redis 6主6

從在同一臺機器上,

dashbaord

也在redis00

上。codis-proxy 開8c

,每台機器開2個

proxy。萬m

網路,centosos 6.

5 核心

2.6.32-431.el6.x86_64。

現象:sprak 70

臺機器向

codis寫開啟

pipline,

不控制pipline

大小,同時排程

400個

cpu,有大量

reset

報錯。長鏈結。

排查:1、redis沒有報錯

2、檢視qps 流量很低

3、codis proxy 沒有報錯,通過網頁檢視流量過山車

一時無法定位問題

解決方案:

方案一:

把codis-proxy

從redis

分開,分4臺,

cpu 30c ,

每台要機器部署1個

codis-proxy

日誌級別調到

warn,

此方案未解決問題,問題依然出現。

通過tcpdump

乙個pipline seesion

的讀寫buffers

各13m,

生產速度大於消費時,各

session

的buffers不夠用,將停止消費,服務端

tcp協議將視窗不斷放小直到

0。長時間處於

0視窗的話,

tcp協議會給對端發

reset

。所以業務端老看到

reset。

方案二:

調整codis_proxy

引數:session_max_bufsize=231072

每乙個seesion 20m

左右。 調整

spark

端寫速度

pipline 5000

個一發,

(pipline 5000

,spark

端一次發

5000

個給codis

,codis

處理完之後在返回給

spark

在5000

個。) spark

端會調200

個程序每乙個程序

5000:

200x5000=1000000

理論會有

1000000

萬ops

,tcp

會有一些限速。最終穩定值在

70多萬。

網路情況:

這只是in的值

250mb

,進出總

量在500mb

左右。

spark

端沒有報錯。

實驗:spark pipline 10000

萬一發,峰值達到:

是的你沒有看錯:

700多萬。

700萬併發,業務端出現了問題,而且700萬量太大對網路也是乙個壓力,因此,我們經測試200萬,屬於乙個業務和運維都可以接受的值!

還能在提速嗎?

如果窄干機機器效能:

1、調速

cpu中斷,

cpu預設中斷都在第乙個

cpu上,

cat /proc/interrupts >f

vim f    

開啟這個檔案

set nowrap  

讓他按行排列

set nowrap

可以看到這些中斷在

0上最多。

2、調整網絡卡佇列

高併發下搶購

了解高併發以及怎麼處理後,測試一下專案中下單的 邏輯很簡單,goods表中stock設定為unsigned。剛開始你可能會覺得這樣會出現超單的情況,但是測試後,沒有出現超單的情況。看似沒有問題,但是看過日誌發現問題還挺多的。這之前請看下這篇文章裡面有處理高併發下單的情況。goods id num g...

高併發下的HashMap

1.hashmap在插入元素過多的時候需要進行resize,resize的條件是 hashmap.size capacity loadfactor。2.hashmap的resize包含擴容和rehash兩個步驟,rehash在併發的情況下可能會形成鍊錶環 hashmap進行儲存時,假設size超過當...

高併發下的MySQL

對於遊戲來說,db存在大量的insert update 可謂玩家的很多動作都會與db溝通。本文暫時忽略os 中的 io利用率,網絡卡流量,cpu變化情況,介紹如何檢視mysql部分引數 檢視每秒事務數 show global status like com commit show global st...