Wie vermeide ich die Warnung transparent_hugepage / defragmentieren von mongodb?


96

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

frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Ich habe den Trick durch Zugabe transparent_hugepage=neverzu GRUB_CMDLINE_LINUX_DEFAULTin /etc/default/grubund 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?


2
Ich hatte das gleiche Problem, vergaß aber, alles neu zu starten, einschließlich Mongod. Ich weiß, dass es eine dumme Frage sein mag, aber haben Sie alles neu gestartet?
Skooppa.com

1
Warten Sie ... Sie wollten den Mongod-Dienst neu starten? oh ... ich rannte sudo service mongod restartund die Warnung war einfach weg! Vielen Dank! Das ist seltsam. Warum kann ich die VM nicht einfach neu starten?
Frederick Zhang

1
Ich bin mir nicht sicher, warum es beim Neustart nicht funktioniert hat. Aber ja, ich wollte den Daemon neu starten. Ich bin froh, dass es funktioniert.
Skooppa.com

7
Dies ist keine Lösung. Der Grund, warum diese Warnung nach dem Neustart angezeigt wird, ist, dass der Mongo-Daemon gestartet wird, bevor Ihr rc.local ausgeführt wurde. Wenn Sie den Daemon nach dem Systemstart neu starten, wird das Problem behoben. Beim nächsten Neustart Ihrer VM wird diese nette Warnung erneut angezeigt. Leider kann ich Ihnen keine Lösung geben, da ich immer noch danach suche.
SileNT

1
@ Frederick888 Auch wenn Sie die VM neu starten? Durch einen Neustart des Dienstes wird die Warnung nur vorübergehend behoben. Weitere Informationen finden Sie in diesem Problem: jira.mongodb.org/browse/SERVER-17418
SileNT

Antworten:


161

Die offizielle MongoDB-Dokumentation bietet verschiedene Lösungen für dieses Problem. Sie können auch diese Lösung ausprobieren , die für mich funktioniert hat:

Hinweis: Versuchen Sie es mit offiziellen Dokumentationsanweisungen, wenn die MongoDB-Version größer als 3.0 ist

  1. /etc/init.d/mongodDatei öffnen .
    (Wenn Sie keine solche Datei überprüfen könnten /etc/init.d/mongod, /etc/init/mongod.confDateien - Gutschrift: die folgenden Kommentare)

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

  3. Neustart mongod( service mongod restart).

Hier sind die Zeilen, die hinzugefügt werden müssen /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

Das ist es!


Entschuldigung, dass ich Ihre Antwort nicht sofort akzeptiert habe. Ich kommentiere die Zeilen, die ich zu rc.local hinzugefügt habe, und probiere Ihre Lösung aus, und es hat auch bei mir funktioniert. Vielen Dank!
Frederick Zhang

6
Nun, ich habe keine /etc/init/mongod.conf-Datei gefunden, aber ich habe diese Zeilen in die Skriptdatei /etc/init.d/mongod eingefügt, kurz vor der Echozeile "Starting ...", und zwar arbeitet für mich
Sagi Mann

2
tolle Lösung! funktioniert auf Ubuntu 14.04 und Mongod 3.
void

1
Dies funktioniert, bitte fügen Sie einen alternativen Eintrag für /etc/init/mongod.conf für Ubuntu-Benutzer hinzu. Gracias.
Jason Sebring

Ich verwende Mongodb auf Ubuntu, wo meine Conf-Datei im YAML-Format ist. Gibt es dort auch eine alternative Lösung?
Pravesh Jain


10

Für Ubuntu 14.04 mit upstart:

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

Ich habe versucht, sysfsutils/ zu verwenden sysfs.conf, bin jedoch beim Starten der Dienste auf schnellen (oder langsamen) Computern auf Zeitprobleme gestoßen. Es sah so aus, als ob manchmal Mongod vor Sysfsutils gestartet wurde. Manchmal hat es funktioniert, manchmal nicht.

Da Mongod ein Upstart-Prozess ist, stellte ich fest, dass die sauberste Lösung darin bestand, die Datei /etc/init/mongod_vm_settings.confmit dem folgenden 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 ) neu und fertig.


8
  1. Öffnen Sie / etc / default / grub

    sudo vi / etc / default / grub

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

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

    sudo update-grub

  5. Starten Sie die Maschine neu

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


1
Es funktioniert nicht für mich ... (Ja, ich habe meine eigene Linux-Maschine mit Grub-Boot) ... :(
Pierpaolo Cira

1
Beachten Sie, dass bei Verwendung einiger der hier genannten Lösungen auf einem System, auf dem auch "optimiert" ausgeführt wird, "optimiert" diese Lösungen möglicherweise überschreibt. Weitere Informationen finden Sie hier: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton

5

Verifiziert, dass die Defragmentierung ohne Rücksicht auf die aktivierte Option ü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, zuerst transparent_hugepage / enabled zu überprüfen. Wenn dies niemals der Fall ist, sollten Sie sich nicht die irrelevante Einstellung transparent_hugepage / defragmentieren.

Quelle .


Unter Oracle Linux 7 ist die Defragmentierung nach den empfohlenen Änderungen nie verschwunden. Endlich ein großer Seufzer der Erleichterung! Diese Antwort braucht mehr Upvotes !! Ich habe 4 Stunden damit verbracht, das zu graben.
Gnana

4

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"

1
arbeitete auch für Centos 7 in /usr/lib/systemd/system/mongod.service
Shortsteps
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.