Edited at

MongoDB 3.2+WiredTigerでもメモリ使用量を抑えたい! (Debian 9)

More than 1 year has passed since last update.

MongoDB 3系からWiredTigerが選べるようになり,メモリ使用量が制限できるようになりました.

storage.wiredTiger.engineConfig.cacheSizeGB オプションで指定できます.


MongoDB 3.4以降は最低256MB

MongoDB 3.4以降,設定下限が256MBに下がりました.


Changed in version 3.4: Values can range from 256MB to 10TB and can be a float.

(訳: 3.4での変更: 値は256MB~10TBまでのfloat(小数)で指定可能です)

Configuration File Options — MongoDB Manual 3.4 #storage.wiredTiger.engineConfig.cacheSizeGB



MongoDB 3.2までは最低1GB

しかし,MongoDB 3.2までは,設定下限は1GBです.0.5とかを指定しても起動しません.

VPSサーバで運用しようとすると,なかなかつらいところがあります.


by default, will use the larger of either:


  • 60% of RAM minus 1 GB, or

  • 1 GB.

(訳: デフォルトでは,総メモリの60%から1GB引いた容量か,1GBのどちらか大きい方になります)

Configuration File Options — MongoDB Manual 3.2 #storage.wiredTiger.engineConfig.cacheSizeGB



抜け道

しかし抜け道があります.configStringに指定できるというものです.


Ramon Fernandez added a comment - Jan 28 2016 01:45:21 PM GMT+0000

Jeroen Vijfhuizen, this works for me, please give it a try:

storage:

wiredTiger:
engineConfig:
configString : cache_size=345M

(意訳: これでうまくいったから試してみて)

[SERVER-22274] WiredTiger cache size is only configurable in whole gigabytes. - MongoDB



試した

/etc/mongodb.conf (Debian 9)で,cache_size=128MとしてドキュメントをInsertしまくってみました.

$ ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mongodb 3339 2.8 10.1 549896 207776 ? Ssl 2月17 135:26 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

以前は1GBまで膨らんでいましたが,今回は200MB程度に抑えられています.うまくいったようです!


おわりに

Debian 9 (Stretch)でもMongoDB 3.4以降が使えたら良かったのですが,

執筆時点でstretchのリポジトリに入っているのがMongoDB 3.2で,MongoDB公式はまだDebian 8止まりJIRAを見るとそろそろ出そうな感じはする)という状態で,MongoDB 3.2でなんとかする方法を模索したのでした.