MongoDB 3.0インストール後のワーニングの消し方

インストール自体は、2.6の時の手順と変わらなかった。
インストール後にいくつかワーニングがでたので、インストールとワーニングの消し方を纏める。

##インストール
インストール自体はMongoDBのドキュメントを見ながら実施
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/

###インストール準備
```lang:console
$sudo vi /etc/yum.repos.d/mongodb-org-3.0.repo 
```

```mongodb-org-3.0.repoの内容
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
```

###インストール実行

```lang:console
$sudo yum install -y mongodb-org
```

###サービス起動

```lang:console
$sudo service mongod start
```
と普通に起動し、mongoコマンドでアクセスすると、

```lang:console
$ mongo
MongoDB shell version: 3.0.0
connecting to: test
Server has startup warnings: 
2015-03-06T23:40:40.565+0900 I CONTROL  [initandlisten] 
2015-03-06T23:40:40.565+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-06T23:40:40.565+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2015-03-06T23:40:40.565+0900 I CONTROL  [initandlisten] 
2015-03-06T23:40:40.566+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-06T23:40:40.566+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2015-03-06T23:40:40.566+0900 I CONTROL  [initandlisten] 
2015-03-06T23:40:40.566+0900 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
2015-03-06T23:40:40.566+0900 I CONTROL  [initandlisten] 
> 
```
こんな感じでワーニングメッセージが表示される。
以下の手順でワーニングを消す

##インストール後の設定(１）　～「WARNING: soft rlimits too low. 」の消し方

```lang:console
$sudo vi /etc/security/limits.d/90-nproc.conf
```
上記はCentOSの場合なので、ディストリビューションによっては、
/etc/security/limits.conf 
だったりすると思う。

```90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024
root       soft    nproc     unlimited

*          soft    nofile    64000  # この行追加
*          hard    nofile    64000  # この行追加
```
```lang:console
$su -
# service mongod restart
```
これで「WARNING: soft rlimits too low. 」は消える。
rebootが必要だったかもしれない。

（2015/07/22追記）
「WARNING: soft rlimits too low. 」は、CentOSにインストールした場合に発生した。
AmazonLinux（Amazon Linux AMI 2015.03 (HVM), SSD Volume Type）では発生しなかった。
（2015/07/22追記 終）


##インストール後の設定(２）～「WARNING: /sys/kernel/mm/transparent_hugepage/enabled(or defrag ) is 'always'.」の消し方
```lang:console
$ sudo vi  /etc/rc.local
```
```rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then  # ↑ここから追加
   echo never > /sys/kernel/mm/transparent_hugepage/enabled   # │
fi                                                            # │
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then   # │
   echo never > /sys/kernel/mm/transparent_hugepage/defrag    # │
fi                                                            # ↓ここまで追加
```
これで
「WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.」
「WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.」
が消える。
ここもrebootが必要だったかもしれない。

以上。記憶を元にメモ。
再度どこかで検証し、更新予定。

###AmazonLinuxにて（2015/07/22追記）

CentOSでは、
「WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.」
「WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.」
どちらも発生したが、
AmazonLinux（Amazon Linux AMI 2015.03 (HVM), SSD Volume Type）では、
「WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.」
のみ発生した。
（2015/07/22追記 終）

###TransparetHugePagesについて（2015/09/28追記）
今まで気づかなかったが、[公式のチュートリアル](http://docs.mongodb.org/manual/tutorial/transparent-huge-pages/)にも、ベストパフォーマンスにするためTransparetHugePagesはDisableにすべき。と記載があった。

``` lang:https：//docs.mongodb.com/manual/tutorial/transparent-huge-pages/
Transparent Huge Pages (THP) is a Linux memory management system that reduces the overhead of Translation
 Lookaside Buffer (TLB) lookups on machines with large amounts of memory by using larger memory pages.

However, database workloads often perform poorly with THP, because they tend to have sparse rather than 
contiguous memory access patterns. You should disable THP on Linux machines to ensure best performance with 
MongoDB.
```

※TransparetHugePagesとは
カーネルのメモリマネジメントの仕組みの一つで性能改善を目的とした機能のようだ。
RedHatのドキュメント（[パフォーマンスチューニングガイド「5.2. Huge pages および transparent huge pages」](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-memory-transhuge.html)）を見ると
「huge Pagesの作成、管理、使用の多くを自動化する抽象レイヤー」とある。
普通のアプリケーションサーバーとして使った場合にはパフォーマンスが良くなるのかもしれない。
Transparet HugePages databaseでググるとMongoDB以外にも無効を推奨するデータベースが多い。

メモ：時間があるときに、[Documentation/vm/transhuge.txt](https://lwn.net/Articles/423592/)をじっくり読む
（2015/09/28追記 終）