MongoDB 記憶體使用量情況分析

來源:互聯網
上載者:User

MongoDB是一個基於分布式檔案儲存體的資料庫。由C++語言編寫。旨在為WEB應用提供可擴充的高效能資料儲存解決方案。

MongoDB 是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,是類似json的bson 格式,因此可以儲存比較複雜的資料類型。Mongo最大的特點是他支援的查詢語言非常強大,其文法有點類似於物件導向的查詢語言,幾乎可以實作類別似關係數 據庫單表查詢的絕大部分功能,而且還支援對資料建立索引。

先 ps 一下看看。

複製代碼 代碼如下:
$ ps aux|grep mongod
mongo    26994  9.0 20.0 797264324 13243052 ?  Sl   May16 117:03 /path/to/mongodb/bin/mongod

總共 760G 多的虛擬記憶體,但是實體記憶體就只有 12.6G 。這個機器可是有 64G 記憶體的哦,這看起來 MongoDB 完全沒用多少記憶體嘛。

再看看 free 的結果。

複製代碼 代碼如下:
$ free -m
             total       used       free     shared    buffers     cached
Mem:         64544      64279        265          0        134      60413
-/+ buffers/cache:       3731      60813
Swap:        31999          0      31999

記憶體倒是佔得差不多了,基本都是 cached ,也就是檔案系統快取。MongoDB 是通過 mmap 方式讓作業系統來處理持久化和緩衝的。每個資料檔案都直接映射到某個虛擬記憶體地址。訪問的時候如果這一頁不在記憶體中,系統就會嘗試把這一頁載入進來。這些 記憶體都是算進 cache 裡的。在 mongodb 的官方文檔裡有這樣一個說法,top 或 ps 裡的 RSIZE 段顯示的是機器的全部記憶體大小,因為 mongodb 會儘可能佔用全部記憶體。但是事實上,這些緩衝並沒有算在裡面。因此在 top 或 ps 中是看不出 MongoDB 的實際記憶體使用量情況的。而 free 雖然可以看到系統的記憶體使用量情況,但是沒法確定這些記憶體裡究竟有多少真的是 MongoDB 使用的。

還好有人做了 vmtouch 這個工具。可以檢查檔案在緩衝中的情況,另外也可以把檔案直接載入進緩衝或者踢出去。只需要對 MongoDB 的所有資料檔案檢查一下緩衝載入情況,就可以知道 MongoDB 到底緩衝了多少資料了。

複製代碼 代碼如下:
$ vmtouch -m4G /path/to/mongodb/data/
           Files: 256
     Directories: 3
  Resident Pages: 15465901/100219772  58G/382G  15.4%
         Elapsed: 4.072 seconds

這裡 -m4G 是 vmtouch 檢查的檔案大小限制。MongoDB 的資料檔案比較大,通常會超過預設的 500M。這樣看來,緩衝用了 58G,這還差不多。Resident Pages 左側的數字是頁的數量,頁的數量乘以檔案系統頁大小才是記憶體使用量量。頁的大小可以通過

複製代碼 代碼如下:
getconf PAGESIZE

查看,通常是 4096,也就是 4KB。

MongoDB 在 NUMA 的機器上運行,並且記憶體被固定到一個 node 的時候,會有一個警告

複製代碼 代碼如下:
WARNING: You are running on a NUMA machine.
We suggest launching mongod like this to avoid performance problems:
numactl –interleave=all mongod [other options]

也許是認為,這種情況下只能用上一個節點的記憶體。但 MongoDB 的緩衝是由作業系統管理的。NUMA 似乎對此並沒有影響。而記憶體不太小的時候 MongoDB 本身很難用掉一個節點的記憶體。這種情況下,是否開啟 numactl –interleave=all 作用已經不大了。能做的也許只能是加記憶體,sharding,或者換 ssd 了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.