Mongodb 3.0を使用していますが、警告が表示されます。
MongoDB Shell version: 3.0.0
connecting to: test
Server has startup warnings:
2015-03-13T16:28:29.405+0800 I CONTROL [initandlisten]
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten]
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten]
~# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
~# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
エコーを使用しようとしましたが、永続的ではありません。再起動後にリセットされます。
echo never > /sys/kernel/mm/transparent_hugepage/defrag
/sys/kernel/mm/transparent_hugepage/enabled
を永続的に変更するにはどうすればよいですか?
あなたはできる
sysfsutils
パッケージをインストールします。
Sudo apt install sysfsutils
その設定を含む行を/etc/sysfs.conf
に追加します。
kernel/mm/transparent_hugepage/enabled = never
これは、カスタムの起動スクリプトに依存する代わりに、すべてのsysfs構成を1か所に保持するため、最もクリーンなソリューションです。カーネルがその設定を公開するパスがわからない場合は、スクリプトと条件式に関する他の回答が適しています。 e。影響を受けるマシンで実行されているカーネルバージョンの大まかな考えさえ持っていない場合。
MongoDBのドキュメントにはいくつかの提案があります。 http://docs.mongodb.org/manual/reference/transparent-huge-pages/
「推奨」方法は、/etc/default/grub
を編集し、transparent_hugepage=never
にGRUB_CMDLINE_LINUX_DEFAULT
を追加してから、update-grub
を実行してGRUB構成を再構築することです。
次の2ライナーがそれを行います。出力を必ず確認してください!
sed -r 's/GRUB_CMDLINE_LINUX_DEFAULT="[a-zA-Z0-9_= ]*/& transparent_hugepage=never/' /etc/default/grub | Sudo tee /etc/default/grub
Sudo update-grub
update-grub
はgrub-mkconfig
のラッパーであることに注意してください。 grub-mkconfig
は、/etc/default/grub
のエントリと/etc/default/grub.d/*
のエントリを上書きします。偶然AWSで実行している場合は、代わりに/etc/default/grub.d/50-cloudimg-settings.cfg
を編集する必要があります。
「代替」方法は、/etc/rc.local
を編集し、exit 0
の前に以下を追加することです。
if test -f /sys/kernel/mm/transparent_hugepage/khugepaged/defrag; then
echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
個人的には、相互に排他的ではなく、デフラグに関する警告がなくなるため、「優先」と「代替」の両方の方法を実行しました。
* Ubuntu 14.04、MongoDB 3.0.2、およびAWSで作業しました。
以下は、AWS EC2上のUbuntu 16.04で動作するようにテストされたソリューションです。 Ubuntu 16.04はsystemd initシステムを使用し、この設定ファイルは、MongoDBが起動する前にこれらの設定を変更する必要があることを表しています。
/etc/systemd/system/mongodb-hugepage-fix.service
という名前のファイルを作成し、次のコンテンツを追加します。
[Unit]
Description="Disable Transparent Hugepage before MongoDB boots"
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
Before=mongodb.service
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
[Install]
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
RequiredBy=mongodb.service
ファイルをsystemdにロードするには:
systemctl daemon-reload
MongoDBの起動時の依存関係としてファイルをアクティブ化するには
systemctl enable mongodb-hugepage-fix
変更をすぐにアクティブにする場合(次のブートの前)
systemctl start mongodb-hugepage-fix
systemctl restart mongod
このソリューションはnot Ubuntu 14.04に適しており、systemdの代わりにUpstart initソリューションを使用します。
以下の行を/etc/rc.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
これは、サーバーを再起動すると実行されます。
GRUBはアップグレード後に変更され、rc.localはmongoの開始後にのみ実行されるため、rc.localの最後に次のようにサービスmongo restartを追加する必要があります。
テスト-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 wait 1 && servie mongod restart
または、誰かが上記の行をUbuntu 14.04のinitスクリプトに追加できましたか?
警告ログを少し読んだ後、これらの2行を/etc/sysfs.conf
yvoiláに追加しました
kernel/mm/transparent_hugepage/enabled = never
kernel/mm/transparent_hugepage/defrag = never
これらの変更を適用した後、マシンを再起動します。
Ansibleを使用してマシンを展開しているため、rcファイルを変更するのは好きではありません。
sysfsutils
/sysfs.conf
を使用してみましたが、高速(または低速マシン)でサービスを開始するときにタイミングの問題が発生しました。時々、monfsはsysfsutilsの前に開始されたように見えました。時には機能し、時には機能しなかった。
Mongodは新興プロセスであるため、最もクリーンなソリューションは次の内容のファイル/etc/mongo_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
)を再起動して完了します。