Mongodb效能最佳化之串連最佳化

來源:互聯網
上載者:User

項目中添加了新的WEB機器結點後,發現其MongoDB叢集的效能開始受到影響,表現在請求的高峰時期,MongoDB的回應時間變得非常長。

通過監控發現,在其高峰時間MongoDB的串連數達到了1100~1500左右,由於每個串連需要使用10M(stack size預設為10240)的記憶體,這導致相當大的記憶體開銷。

BoxedIce的處理方法是,首先通過最佳化串連池,將串連數控制在了800個左右,然後通過修改核心的stack size值,從預設的10M修改到1M,使串連佔用的記憶體大大減少。


MongoDB串連數過多的話,會拖累效能,可以通過serverStatus查詢串連數:

mongo> db.serverStatus().connections

每個串連都是一個線程,需要一個Stack,Linux下預設的Stack設定一般比較大:

shell> ulimit -a | grep stack stack size              (kbytes, -s) 10240

至於MongoDB實際使用的Stack大小,可以用如下命令確認(單位:K):

shell> cat /proc/$(pidof mongod)/limits | grep stack | awk -F 'size' '{print int($NF)/1024}'

如果Stack過大(比如:10240K)的話沒有意義,簡單對照命令結果中的Size和Rss:

shell> cat /proc/$(pidof mongod)/smaps | grep 10240 -A 10

所有串連消耗的記憶體加起來會相當驚人,推薦把Stack設定小一點,比如說1024:

shell> ulimit -s 1024

註:從MongoDB1.8.3開始,MongoDB會在啟動時自動化佈建Stack。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.