主頁(yè) > 知識(shí)庫(kù) > MongoDB 內(nèi)存管理相關(guān)總結(jié)

MongoDB 內(nèi)存管理相關(guān)總結(jié)

熱門標(biāo)簽:外呼線路資源屬于電信業(yè)務(wù)嗎 crm外呼系統(tǒng)聯(lián)系方式 小裙科技電銷機(jī)器人怎樣 河南電話外呼系統(tǒng)招商 內(nèi)蒙古營(yíng)銷智能外呼系統(tǒng)哪個(gè)好 呼和浩特外呼系統(tǒng)原理是什么 智能外呼系統(tǒng)官網(wǎng) 長(zhǎng)沙電銷外呼防封卡是什么 青白江400企業(yè)電話申請(qǐng)

MongoDB的內(nèi)存用在哪兒?

   在MongoDB中,加載各種依賴的lib到內(nèi)存、管理客戶端請(qǐng)求、元數(shù)據(jù)管理存儲(chǔ)等工作都需要占用內(nèi)存,但其實(shí)內(nèi)存使用的大部分還是在存儲(chǔ)引擎和客戶端連接請(qǐng)求處理方面。

   一方面是存儲(chǔ)引擎的cache,通常情況下,我們可以使用參數(shù)cacheSizeGB參數(shù)(下面會(huì)講到)來(lái)控制內(nèi)存使用率,一旦超過(guò)這個(gè)內(nèi)存使用率,則MongoDB的存儲(chǔ)引擎會(huì)淘汰掉部分內(nèi)存中的數(shù)據(jù)頁(yè)。

   正常運(yùn)行的MongoDB實(shí)例,內(nèi)存使用率大約為80%的cacheSizeGB參數(shù)值,因?yàn)槌^(guò)80%之后,內(nèi)存淘汰策略就開(kāi)始淘汰過(guò)期的數(shù)據(jù)頁(yè)了,如果出現(xiàn)使用率過(guò)大,則多半表示當(dāng)前實(shí)例內(nèi)存淘汰的壓力比較大。請(qǐng)求就有延時(shí)的可能。

   另一方面,如果客戶端的連接數(shù)過(guò)多,建立過(guò)多的tcp鏈接,這些連接的維護(hù),需要有read buffer和write buffer以用來(lái)收發(fā)網(wǎng)絡(luò)包,所以也會(huì)產(chǎn)生開(kāi)銷。每個(gè)連接占用的內(nèi)存大小約為2MB左右。

如何限制MongoDB對(duì)內(nèi)存的使用?

   最近在線上發(fā)現(xiàn)了一些有意思的現(xiàn)象,比如某一臺(tái)服務(wù)器上部署了MySQL和MongoDB的服務(wù),然后內(nèi)存報(bào)警,說(shuō)是內(nèi)存已經(jīng)使用了超過(guò)85%了,這個(gè)時(shí)候,通常我們會(huì)想到遷移服務(wù)。將MySQL或者M(jìn)ongoDB的服務(wù)切換到其他的機(jī)器上,這樣,服務(wù)器的內(nèi)存就可以節(jié)省下來(lái)。

    但是實(shí)際的現(xiàn)象就是,如果我們遷移了MySQL的服務(wù)之后,服務(wù)器的內(nèi)存臨時(shí)會(huì)降下來(lái),但是一段時(shí)間過(guò)后,又會(huì)報(bào)警,因?yàn)镸ongoDB已經(jīng)將MySQL騰出來(lái)的內(nèi)存空間也占用完了。

    我們知道,在MySQL中,占用內(nèi)存比較多的就是innodb_buffer_pool,還有一堆其他的buffer,除此之外,連接數(shù)也是一個(gè)需要考慮的因素。

     在MongoDB中,如果我們不限制MongoDB的內(nèi)存使用,那么MongoDB就會(huì)盡可能的占用更多的內(nèi)存來(lái)提高讀寫(xiě)性能。具體的策略如下:

    從MongoDB3.4開(kāi)始, WiredTiger存儲(chǔ)引擎默認(rèn)的cache size是下面2個(gè)值中較大的一個(gè)。

公式一:0.5*(物理內(nèi)存-1GB)

公式二:256MB

     例如,物理內(nèi)存4G,則cache size=1.5GB,如果物理內(nèi)存1.5G,則cache size=0.5*(1.5-1)=250MB 256MB ,所以取值為256MB

     MongoDB中可以通過(guò)配置文件的內(nèi)容限定MongoDB所使用的內(nèi)存,關(guān)鍵參數(shù)如下:

storage:
 wiredTiger:
  engineConfig:
   cacheSizeGB: number> # 單位是GB,浮點(diǎn)型
   journalCompressor: string>
   directoryForIndexes: boolean>
   maxCacheOverflowFileSizeGB: number>
  collectionConfig:
   blockCompressor: string>
  indexConfig:
   prefixCompression: boolean>

    上面的參數(shù),一般情況下,單機(jī)單實(shí)例,建議配置在內(nèi)存的60%左右。

cacheSizeGB參數(shù)配置的注意事項(xiàng)

幾點(diǎn)建議:

1、不要增加WiredTiger的內(nèi)部cache size超過(guò)默認(rèn)值

2、WiredTiger存儲(chǔ)引擎使用WiredTiger內(nèi)部緩存和文件系統(tǒng)緩存

3、WiredTiger會(huì)自動(dòng)使用所有剩余的文件系統(tǒng)緩存

4、單機(jī)多實(shí)例請(qǐng)務(wù)必減少mongod的內(nèi)存分配值

如何查看內(nèi)存使用情況?

db.hostInfo()

這個(gè)命令可以查看MongoDB的內(nèi)存限制情況,查看結(jié)果如下:

SECONDARY> db.hostInfo()
{
  "system" : {
    "currentTime" : ISODate("2020-12-31T03:51:28.278Z"),
    "hostname" : "localhost.localdomain:24204",
    "cpuAddrSize" : 64,
    "memSizeMB" : 64393,
    "numCores" : 8,
    "cpuArch" : "x86_64",
    "numaEnabled" : false
  },

以上就是MongoDB 內(nèi)存管理相關(guān)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MongoDB 內(nèi)存管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 解決MongoDB占用內(nèi)存過(guò)大頻繁死機(jī)的方法詳解
  • python監(jiān)控linux內(nèi)存并寫(xiě)入mongodb(推薦)
  • 解決MongoDB 排序超過(guò)內(nèi)存限制的問(wèn)題
  • 將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫(kù)的使用方法
  • cgroup限制mongodb進(jìn)程內(nèi)存大小
  • MongoDB 內(nèi)存使用情況分析

標(biāo)簽:呼倫貝爾 楚雄 舟山 白山 菏澤 池州 黃石 安順

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MongoDB 內(nèi)存管理相關(guān)總結(jié)》,本文關(guān)鍵詞  MongoDB,內(nèi)存,管理,相關(guān),總結(jié),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MongoDB 內(nèi)存管理相關(guān)總結(jié)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MongoDB 內(nèi)存管理相關(guān)總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章