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