環境:
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...