web-dev-qa-db-ja.com

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

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

一体どのように警告を回避できますか?

95
Frederick Zhang

公式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

それでおしまい!

161
efkan

MongoDBは、init.dスクリプトを使用するよう推奨事項を更新しました。 http://docs.mongodb.org/master/tutorial/ transparent-huge-pages /

24
robbie613

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

10
Whyhankee
  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 grubブートがサポートされます。 DigitalOceanはgrubブートをサポートしていません。

8
clrho

有効に関係なくデフラグが検査されることを確認しました:

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

ソース

5

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
snap