MongoDBで特に重要なOSの設定は以下の3つ
- ulimitを大きくする
- readaheadを小さくする
- NUMAをきる
ulimitを大きくする
理由はTCPコネクションの枯渇を回避するため。
MongoDBはレプリケーションやシャーディングを使って、構成するコンポーネント(mongod,mongos,config)の数が多くなると、利用するTCPコネクション数がどんどん増えていく。
シングル構成であればあまり気にする必要はないかもしれない。
readaheadを小さくする
理由は物理メモリを効率よく利用するため。
readaheadはファイルをmmapでメモリにマップするときのサイズだが、このサイズが大きいとクエリで利用するドキュメント以外のデータもメモリにマップされてしまうことが多く、物理メモリが効率よく使えないことが多い。
MongoDBのresで表される物理メモリ利用量が、搭載する物理メモリ量よりも小さい(半分ぐらい)の場合は、このチューニングをしてみるとよいだろう
NUMAをきる
理由はCPUが効率よくメモリを利用できるため
NUMAはざっくり言うと、複数CPU複数メモリ搭載時に、各CPUが利用するメモリを、そのCPUが早くアクセスできるメモリに優先する、ハードウェアのアーキテクチャ。
MongoDBはメモリ全体をまんべんなく使うため、この機能を有効にする意味はない。むしろ逆効果になる。
NUMAが有効なハードウェアであり、CPUネックになっている場合は、このチューニングをした方がよいだろう。
詳しい設定方法
公式ホームページに掲載されている
http://docs.mongodb.org/manual/administration/production-notes/