webentwicklung-frage-antwort-db.com.de

Wie vermeide ich transparent_hugepage / defrag Warnung von Mongodb?

Ich erhalte die folgende Warnung von Mongodb über THP

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'

Aber ich habe es geschafft, THP manuell auszuschalten

[email protected]:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[email protected]:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Ich habe den Trick gemacht, indem ich transparent_hugepage=never bis GRUB_CMDLINE_LINUX_DEFAULT im /etc/default/grub und Hinzufügen

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

zu /etc/rc.local

Wie um alles in der Welt kann ich die Warnung vermeiden?

95
Frederick Zhang

Offizielle MongoDB-Dokumentation gibt verschiedene Lösungen für dieses Problem an. Sie können auch versuchen diese Lösung , was bei mir funktioniert hat:

Hinweis: Probieren Sie offizielle Dokumentationsanweisungen aus, wenn die MongoDB-Version größer als 3.0 ist .

  1. Öffnen Sie die Datei /etc/init.d/mongod.
    (wenn keine solche Datei vorhanden ist, können Sie /etc/init.d/mongod, /etc/init/mongod.conf Dateien überprüfen - Kredit: die folgenden Kommentare)

  2. Fügen Sie die folgenden Zeilen unmittelbar nach chown $DAEMONUSER /var/run/mongodb.pid Und vor end script Ein.

  3. Starten Sie mongod neu (service mongod restart).

Hier sind die Zeilen, die zu /etc/init.d/mongod Hinzugefügt werden müssen:

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

Das ist es!

161
efkan

MongoDB hat die Empfehlung aktualisiert, jetzt ein init.d Skript zu verwenden: http://docs.mongodb.org/master/tutorial/ transparent-riesige-seiten /

24
robbie613

Für Ubuntu 14.04 mit Upstart:

Da wir Computer mit Ansible bereitstellen, mag ich es nicht, RC-Dateien oder GRUB configs zu ändern.

Ich habe versucht, sysfsutils/sysfs.conf Zu verwenden, aber beim Starten der Dienste auf schnellen (oder langsamen) Computern kam es zu Zeitproblemen. Es sah so aus, als ob manchmal Mongod vor sysfsutils gestartet wurde. Manchmal hat es funktioniert, manchmal nicht.

Da Mongod ein Emporkömmling ist, stellte ich fest, dass die sauberste Lösung darin bestand, die Datei /etc/init/mongod_vm_settings.conf Mit folgendem Inhalt hinzuzufügen:

# 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

Dadurch wird das Skript ausgeführt, kurz bevor Mongod gestartet wird. Mongod neu starten (Sudo service mongod restart) Und fertig.

10
Whyhankee
  1. Öffne/etc/default/grub

    Sudo vi/etc/default/grub

  2. Aktualisieren
    GRUB_CMDLINE_LINUX_DEFAULT = "" bis GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"

  3. Datei speichern
    : wq (in vi)
  4. Führen Sie update-grub aus

    Sudo update-grub

  5. Maschine neu starten

Update: Wenn Sie einen virtuellen Hosting-Anbieter verwenden, funktioniert dies. IFF-Grub-Boot wird unterstützt. DigitalOcean unterstützt kein Grub-Boot.

8
clrho

Verifiziert, dass die Defragmentierung ohne Berücksichtigung der aktivierten überprüft wird:

$ 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)

Daher besteht die Lösung für diesen Fehler darin, zunächst transparent_hugepage/enabled zu betrachten. Wenn dies jedoch nie der Fall ist, sollten Sie sich nicht die irrelevante Einstellung transparent_hugepage/defrag ansehen.

Quelle .

5

Ubuntu 16.04 mit systemd:

systemctl edit mongod

Fügen Sie Folgendes ein:

[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"
2
snap