專案使用批處理方式處理資料,最開始專案很穩定,一秒一批,200ms基本處理完畢。
后來資料量激增一倍之后,專案時不時有阻塞的情況發生。
解決思路,1,最開始以為計算資源不夠用,查看機器之后發現沒有問題。
2,各個服務器之間通訊速度,用的都是阿里的服務器,把所有服務器調整到一個網段之后,情況仍然沒有改善。
3,沒有辦法盯上redis,但是redis是和后端通用的,不能輕易做結論,在業務邏輯里打點,把每次操作redis的所用時間打出來,發現就是redis的問題。
定位,為什么redis不行了呢?最開始以為機器記憶體不夠用,把redis遷移到32g的服務器上,仍然不行,不是記憶體的事,那是怎么回事呢?登錄cli,查詢所有耗時較長操作,然后把代碼改了,還不行。
最后發現每隔一會redis服務占cpu百分之百,而且要持續兩秒,原來問題在這,redis資料是放在記憶體當中的,但是redis有備份機制,為了防止資料丟失,有幾個觸發條件,一旦觸發一條,就會把記憶體當中的資料刷到磁盤中,形成rdb檔案(默認rdb備份機制,)去conf組態檔中修改觸發條件之后果然不在卡了。
備份機制一定要有,結合所用服務器,資料量,資料重要性等選擇最適合自己的備份機制與備份策略才是王道。
uj5u.com熱心網友回復:
樓主后來你的出發條件修改成了什么,按照你說的原來的條件應該是apendsync aways,現在是修改成了no嗎,還是說是everysec轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17451.html
標籤:Spark
