內存使用率高問題排查
更新(xin)時間 2024-09-11 22:13:11
最近更新時間: 2024-09-11 22:13:11
分享文章
本(ben)節主(zhu)要介紹內存使用率(lv)問題排查。
使用文檔數據庫(ku)時(shi),當(dang)實(shi)例的(de)(de)內(nei)(nei)存(cun)使用率達(da)到90%,SWAP利(li)用率超過5%時(shi),此時(shi)認為實(shi)例的(de)(de)內(nei)(nei)存(cun)已達(da)瓶頸(jing),會(hui)導(dao)致系統響(xiang)應(ying)慢(man),甚至出現內(nei)(nei)存(cun)溢出(OOM)的(de)(de)隱患。
本章節主要介紹排查解決實例內存使用率高的問(wen)題。
查看內存使用情況
您可以通過查看監控指(zhi)標(內存(cun)使用率和SWAP利用率),了解(jie)實例內存(cun)的使用情(qing)況。
具體操作請參見查看監控指標。
圖1 查看內存使用情況
說明MongoDB的緩存默認會預(yu)留50%的內存,所以(yi)即使在實例空載狀態下,監控指標仍然會顯示內存占用50%,是正常現象,可以(yi)忽略。
解決方案
- 控制并發連接數。連接數據庫時,需要計算業務一共有多少個客戶端, 每個客戶端配置的連接池大小是多少,總的連接數不宜超過當前實例能承受的最大連接數的80%。連接太多會導致內存和多線程上下文的開銷增加,影響請求處理延時。
- 建議配置連接池,連接池最大不要超過200。
- 降低單次請求的內存開銷,例如通過創建索引減少集合的掃描、內存排序等。
- 在連接數合適的情況下內存占?持續增?,建議升級內存配置,避免可能存在內存溢出和大量清除緩存而導致系統性能急劇下降。
- 集群實例,請參見變更集群實例的CPU和內存規格。
- 副本集實例,請參見變更副本集實例的CPU和內存規格。