MongoDB

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

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でなんとかする方法を模索したのでした.