THPについてmongodbから次の警告が表示されます
2015-03-06T21:01:15.526-0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-06T21:01:15.526-0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
しかし、手動でTHPをオフにすることができました
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
transparent_hugepage=never
のGRUB_CMDLINE_LINUX_DEFAULT
に/etc/default/grub
を追加して、
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
/etc/rc.local
へ
一体どのように警告を回避できますか?
公式MongoDBドキュメント は、この問題に対するいくつかの解決策を提供します。 このソリューション を試すこともできます。
注:MongoDBバージョンが3.0より大きい場合は、公式のドキュメントディレクティブを試してください
/etc/init.d/mongod
ファイルを開きます。
(そのようなファイルがない場合は、/etc/init.d/mongod
、/etc/init/mongod.conf
ファイルを確認できます-クレジット:以下のコメント)
以下の行をchown $DAEMONUSER /var/run/mongodb.pid
の直後とend script
の前に追加します。
mongod
(service mongod restart
)を再起動します。/etc/init.d/mongod
に追加する行は次のとおりです。
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
それでおしまい!
MongoDBは、init.dスクリプトを使用するよう推奨事項を更新しました。 http://docs.mongodb.org/master/tutorial/ transparent-huge-pages /
Upstartを使用するUbuntu 14.04の場合:
Ansibleを使用してマシンを展開しているため、rcファイルやGRUBの設定を変更するのは好きではありません。
sysfsutils
/sysfs.conf
を使用しようとしましたが、高速(または低速のマシン)でサービスを開始するとタイミングの問題が発生しました。時々、monfsはsysfsutilsの前に開始されたように見えました。時には機能し、時には機能しなかった。
Mongodは新興プロセスであるため、最もクリーンなソリューションは、次の内容のファイル/etc/init/mongod_vm_settings.conf
を追加することであることがわかりました。
# Ubuntu upstart file at /etc/init/mongod_vm_settings.conf
#
# This file will set the correct kernel VM settings for MongoDB
# This file is maintained in Ansible
start on (starting mongod)
script
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
end script
これにより、mongodが開始される直前にスクリプトが実行されます。 mongod(Sudo service mongod restart
)を再起動して完了します。
/ etc/default/grubを開きます
Sudo vi/etc/default/grub
更新
GRUB_CMDLINE_LINUX_DEFAULT = ""からGRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"
Update-grubを実行します
Sudo update-grub
マシンを再起動
更新:仮想ホスティングプロバイダーを使用している場合、IFF grubブートがサポートされます。 DigitalOceanはgrubブートをサポートしていません。
有効に関係なくデフラグが検査されることを確認しました:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
$ service mongod start
... (in log) WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'
$ echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
$ service mongod stop
$ service mongod start
... (no warning in log)
したがって、このバグの修正は、最初にtransparent_hugepage/enabledを確認することであり、もしそうでない場合は、無関係なtransparent_hugepage/defrag設定を確認する必要はありません。
ソース 。
Systemdを使用したUbuntu 16.04:
systemctl edit mongod
以下を貼り付けます。
[Service]
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"