Mongodb
新鮮的 MongoDB 使用 100MB 的虛擬記憶體?
我在伺服器上使用 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 Bourne
sh
為例)將近 10MB 虛擬大小。更複雜的 shell(比如 Bourne-Again Shell
bash
)不到 25MB。Apache Web 伺服器工作者的 VM 大小可以為 150MB 或更大。
一個只有 100MB 虛擬大小並通過網路進行通信的數據庫引擎,甚至是 NoSQL 引擎,坦率地說是一個程式奇蹟。如果您希望能夠用這個奇蹟做任何事情,您將不得不為其提供足夠的 RAM 來實際保存和處理數據。