Mongodb

新鮮的 MongoDB 使用 100MB 的虛擬記憶體?

  • March 8, 2013

我在伺服器上使用 MongoDB 時遇到虛擬記憶體使用問題。注意:我只有一個沒有root 權限的本地使用者帳戶。

伺服器的 VM 限制(來自 ulimit -v)是 120MB。

對於數據庫,MongoDB 報告使用了 100MB 的虛擬記憶體。

> db.serverStatus().mem 
{
   "bits" : 32,
   "resident" : 23,
   "virtual" : 100,
   "supported" : true,
   "mapped" : 0
}

一旦我嘗試創建我的第一個數據條目(通過管理數據庫中的 db.addUser),它就會因記憶體不足錯誤而失敗。

done allocating datafile DBPATH/admin.0, size: 16MB,  took 0.244 secs

ERROR:   mmap() failed for DBPATH/ admin.0 len:16777216 errno:12 Cannot allocate memory

我知道,使用較小的 VM 限制和 32 位 mongodb,我將無法創建巨大的數據庫,但這沒關係。我不需要龐大的數據庫。

我無法理解的是為什麼它使用這麼多虛擬記憶體,以及為什麼它不能創建一個 16MB 的數據庫表。

我已經閱讀了關於這個其他問題的公認答案。它闡明了 mongodb 如何使用虛擬記憶體,但它並沒有幫助我理解這裡出了什麼問題。

您需要為您的 MongoDB 伺服器提供足夠的資源——這意味著大量的 RAM。

您將其限制為幾乎none,因此除非您設置更合理的記憶體使用限制,否則您不應期望它能夠工作。


您似乎在錯誤地假設 100MB 是大量記憶體而努力工作。

它不是。

一個簡單的 shell(讓我們以普通的老式 vanilla Bournesh為例)將近 10MB 虛擬大小。

更複雜的 shell(比如 Bourne-Again Shell bash)不到 25MB。

Apache Web 伺服器工作者的 VM 大小可以為 150MB 或更大。

一個只有 100MB 虛擬大小並通過網路進行通信的數據庫引擎,甚至是 NoSQL 引擎,坦率地說是一個程式奇蹟。如果您希望能夠用這個奇蹟做任何事情,您將不得不為其提供足夠的 RAM 來實際保存和處理數據。

引用自:https://serverfault.com/questions/485680