LoginSignup
2
1

More than 5 years have passed since last update.

MongoDBでメモリサイズを1G未満に設定する裏技

Last updated at Posted at 2017-01-09

MongoDBのマニュアルにはwiredTigerCacheSizeGBという設定項目があり、これを使えばWiredTigerがキャッシュに使うメモリサイズを制限してできるものなのだが、単位がGBであり1GB未満の値は割り当てられない。
しかし裏オプションを使えば、任意の値を指定できるのことを発見してしまったので、紹介する。

やりかた

「--wiredTigerEngineConfigString」という裏オプションを使って、以下の様にmongodにWiredTigerの設定文字列を直接指定する。

例) 100Mに設定

$ mongod --dbpath data --wiredTigerEngineConfigString='cache_size=100M'

実験

本当に100Mで制限できたか調査してみる。MongoDB 3.4.1を利用した。

まずは、起動直後にmongostatを起動してみる。

insert query update delete getmore command dirty used flushes vsize   res qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   211b   44.6k    3 Jan 10 01:17:15.045
    *0    *0     *0     *0       0     6|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   721b   68.5k    3 Jan 10 01:17:16.045
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   158b   44.6k    3 Jan 10 01:17:17.045

物理メモリ量(res)をみるとは最初は43Mであり、これはMongoDB本体が使ってるメモリ量である。

そこでデータを挿入していく

insert query update delete getmore command dirty  used flushes vsize   res qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     6|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   664b   68.4k    3 Jan 10 01:17:18.045
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   158b   44.7k    3 Jan 10 01:17:19.043
    *0    *0     *0     *0       0     6|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   664b   68.5k    3 Jan 10 01:17:20.042
 24076    *0     *0     *0       0     2|0  8.1% 21.5%       0  311M 73.0M 0|0 0|0  31.1m   45.8k    3 Jan 10 01:17:21.039
 36009    *0     *0     *0       0     6|0  4.9% 50.2%       0  343M  103M 0|0 0|0  46.6m   70.0k    3 Jan 10 01:17:22.039
 39980    *0     *0     *0       0     1|0  8.4% 85.1%       0  371M  132M 0|0 0|0  51.7m   46.4k    3 Jan 10 01:17:23.039
 39003    *0     *0     *0       0     6|0  3.4% 62.7%       0  381M  142M 0|0 0|0  50.4m   70.2k    3 Jan 10 01:17:24.039
 27936    *0     *0     *0       0     1|0  7.9% 64.6%       0  381M  143M 0|0 0|0  36.1m   45.8k    3 Jan 10 01:17:25.041
 30034    *0     *0     *0       0     6|0  6.8% 81.1%       0  381M  143M 0|0 0|0  38.8m   69.8k    3 Jan 10 01:17:26.040
 35003    *0     *0     *0       0     2|0  6.2% 75.0%       0  383M  144M 0|0 0|0  45.3m   46.2k    3 Jan 10 01:17:27.040

すると、どんどん物理メモリ量は増えていくが、143M付近で頭打ちとなった。つまり MongoDB本体のメモリ使用量43M + WiredTigerキャッシュ100M で143Mだ。

うまく動いているようだ。

さいごに

注意してほしいのは、これは公式にはない裏オプションで、WiredTigerに設定文字列を直接渡すというハックなので、WiredTigerに自信が無い人は本番環境では絶対に使わないでください。私も使いません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1