mongodbからのtransparent_hugepage / defrag警告を回避する方法は?


96

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=neverGRUB_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

いったいどうすれば警告を回避できますか?


2
同じ問題がありましたが、mongodを含むすべてを再起動するのを忘れていました。ばかげた質問かもしれませんが、すべて再起動しましたか?
Skooppa.com 2015年

1
待って... mongodサービスを再起動するつもりですか?ああ...私は走っsudo service mongod restartたが警告は消えた!ありがとう!これは奇妙ですが、なぜVMを再起動できないのですか?
Frederick Zhang

1
なぜそれがリブートでキャッチされなかったのかわからない。しかし、ええ、私はデーモンを再起動することを意味しました。うまくいきました。
Skooppa.com 2015年

7
これは解決策ではありません。再起動後にこの警告が表示されるのは、rc.localが実行される前にmongoデーモンが起動されるためです。システムブート後にデーモンを再起動すると問題が解決しますが、次回VMを再起動すると、この警告が再び表示されます。残念ながら、まだ解決策を模索しているため、解決策を提供することはできません。
SileNT 2015年

1
@ Frederick888 VMを再起動しても?サービスを再起動すると、警告が一時的に解決されます。詳細については、この問題を確認してください:jira.mongodb.org/browse/SERVER-17418
SileNT

回答:


161

MongoDBの公式ドキュメントには、この問題の解決策がいくつか記載されています。私のために働いたこの解決策を試すこともできます:

注:MongoDBのバージョンが3.0以降の場合は、公式のドキュメントディレクティブを試してください

  1. /etc/init.d/mongodファイルを開きます。
    (チェックするファイルがない場合は/etc/init.d/mongod/etc/init/mongod.confファイル-クレジット:以下のコメント)

  2. 以下の行を直後chown $DAEMONUSER /var/run/mongodb.pidと直前に追加しますend script

  3. 再起動しますmongodservice 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

それでおしまい!


私はすぐにあなたの答えを受け入れませんでした。rc.localに追加した行をコメントアウトしてあなたの解決策を試しましたが、それも私にとってはうまくいきました。ありがとう!
Frederick Zhang、

6
まあ、/ etc / init / mongod.confファイルは見つかりませんでしたが、/ etc / init.d / mongodスクリプトファイルのecho "Starting ..."行の直前にそれらの行を追加しました。私のために働く
Sagi Mann

2
素晴らしいソリューション!Ubuntu 14.04とmongod 3で動作し
ます

1
これは動作し、Ubuntuユーザー用に/etc/init/mongod.confの代替エントリを追加してください。グラシアス。
Jason Sebring

私のconfファイルがYAML形式のubuntuでmongodbを使用しています。そこでも適用可能な代替ソリューションはありますか?
Pravesh Jain


10

upstartを使用するUbuntu 14.04の場合:

Ansibleでマシンをデプロイしているので、rcファイルやGRUB構成を変更するのは好きではありません。

sysfsutils/ を使用してみましたsysfs.confが、高速(または低速のマシン)でサービスを開始すると、タイミングの問題が発生しました。sysfsutilsの前にmongodが起動されたようです。うまくいったこともあれば、うまくいかなかったこともあります。

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)を再起動して完了します。


8
  1. / etc / default / grubを開きます

    sudo vi / etc / default / grub


  2. GRUB_CMDLINE_LINUX_DEFAULT = ""をGRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"に更新します

  3. ファイルを保存
    :wq(vi内)
  4. update-grubを実行する

    sudo update-grub

  5. マシンを再起動

更新:仮想ホスティングプロバイダーを使用している場合、これは動作します。IFFグラブブートはサポートされています。DigitalOceanはGRUBブートをサポートしていません。


1
それは私のために動作しません...(はい、私は自分のLinuxマシンとGRUBブートを持っています)... :(
Pierpaolo Cira

1
ここで言及したソリューションのいくつかを使用している場合、 'tuned'も実行するシステムでは、tunedがそれらのソリューションをオーバーライドする場合があることに注意してください。詳細については、こちらをご覧ください:bugzilla.redhat.com/show_bug.cgi
id

5

有効化されているかどうかに関係なくデフラグが検査されることを確認:

$ 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設定を確認する必要はありません。

ソース


Oracle Linux 7に取り組んで、デフラグは推奨された変更後に消えることはありませんでした。この回答にはさらに投票が必要です!! 私はこれを掘り起こすのに4時間費やしました。
Gnana 2017

4

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"

1
Centos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.