故障案例--mongo 3.0鑑權導致cpu居高不下

故障現象

CPU奇高,達到接近物理機核數上限;

錯誤日誌中的業務SQL執行較快,SQL不存在問題;

錯誤日誌大量的刷屏以下信息


原因分析

從錯誤日誌看,絕大部分情況都處於saslStart,查看資料發現這是mongo 3.0的鑑權機制正是SCRAM-SHA-1,於是懷疑是這個鑑權機制導致了CPU飆升;

通過了解,業務採用的是短連接,進一步確定原因應該是短時間大量的連接過來觸發的鑑權操作導致了大量CPU計算;

進一步用perf工具查看,整臺物理機的資源很大程度都被以下函數佔用,猜測這些函數涉及到很多計算,查看代碼發現絕大部分函數都在文件src/mongo/crypto/tom/sha1.c ,這是實現加密的代碼,涉及到複雜的哈希計算,關於這個SCRAM-SHA-1的介紹,可以參考官方文檔https://docs.mongodb.com/v3.0/core/security-scram-sha-1/#authentication-scram-sha-1


解決方法

短時間的方案

1 棄用鑑權

2 或許換一種鑑權方式也行,其他鑑權方式或許不涉及這麼多的計算工作(不確定)

當時緊急做了棄用用戶鑑權的處理,CPU立馬得到下降,大概控制在5個核以內(之前32核全佔滿)

值得一提的是,去掉鑑權後(我這就是整個集羣去掉keyfile認證),如果不改連接uri,實際上這時雖然也能登陸,因爲賬戶和密碼是正確的,但這時應該還是有鑑權的,錯誤日誌依舊會打印這些認證信息,所以還需要修改下連接URI,將用戶名和密碼值爲空。

長期的方案

棄用短連接的方式,改用連接池





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章