Ich benutze Mongodb 3.0 und finde eine Warnung:
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
Ich versuche, Echo zu verwenden, aber es ist nicht permanent. Nach dem Neustart wird es zurückgesetzt.
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Wie ändere ich /sys/kernel/mm/transparent_hugepage/enabled
dauerhaft?
Antworten:
Du kannst
Installiere das
sysfsutils
Paket:und hängen Sie eine Zeile mit dieser Einstellung an
/etc/sysfs.conf
:Dies ist die sauberste Lösung, da die gesamte sysfs-Konfiguration an einem Ort bleibt, anstatt sich auf benutzerdefinierte Startskripten zu verlassen. Die anderen Antworten mit den Skripten und bedingten Ausdrücken eignen sich, wenn Sie nicht wissen, über welchen Pfad der Kernel diese Einstellung verfügbar macht, dh wenn Sie nicht einmal eine ungefähre Vorstellung davon haben, welche Kernelversion auf dem betroffenen Computer ausgeführt wird.
quelle
cat /sys/kernel/mm/transparent_hugepage/enabled
? Gibt es das überhaupt?sysfs.conf
wird normalerweise beim Booten von ausgewertet/etc/init.d/sysutils
. Ist es aktiviert? Was passiert beim Aufruf/etc/init.d/sysutils start
?sysfs.conf
Datei und/etc/init.d/sysutils
. Ubuntu 16.04sysctl
ist für Einstellungen, die Sie auch mit Kernel-Parametern vornehmen können;sysfs.conf
ist für Einträge in/sys
.Die MongoDB-Dokumente enthalten einige Vorschläge. http://docs.mongodb.org/manual/reference/transparent-huge-pages/
Die "bevorzugte" Möglichkeit besteht darin, die GRUB-Konfiguration zu bearbeiten
/etc/default/grub
und an sie anzuhängentransparent_hugepage=never
und sieGRUB_CMDLINE_LINUX_DEFAULT
dann auszuführenupdate-grub
, um sie neu zu erstellen.Der folgende Doppelliner wird genau das tun. Überprüfen Sie unbedingt die Ausgabe!
Beachten Sie, dass dies
update-grub
ein Wrapper für istgrub-mkconfig
.grub-mkconfig
Ich werde Einträge/etc/default/grub
mit denen von verprügeln/etc/default/grub.d/*
. Wenn Sie zufällig mit AWS arbeiten, müssen Sie stattdessen Änderungen vornehmen/etc/default/grub.d/50-cloudimg-settings.cfg
.Die "alternative" Methode besteht darin,
/etc/rc.local
Folgendes zu bearbeiten und hinzuzufügenexit 0
:Persönlich habe ich am Ende sowohl die "bevorzugte" als auch die "alternative" Methode angewendet, da sie sich nicht gegenseitig ausschließen und die Warnung vor einer Defragmentierung beseitigt wird.
* Arbeitete für mich auf Ubuntu 14.04, MongoDB 3.0.2 und AWS.
quelle
50-cloudimg-settings.cfg
Hier ist eine Lösung, die auf Ubuntu 16.04 unter AWS EC2 getestet wurde. Ubuntu 16.04 verwendet das systemd init-System und diese Konfigurationsdatei drückt aus, dass diese Einstellungen geändert werden sollten, bevor MongoDB startet.
Erstellen Sie eine Datei mit dem Namen
/etc/systemd/system/mongodb-hugepage-fix.service
und fügen Sie den folgenden Inhalt hinzu:So laden Sie die Datei in systemd:
So aktivieren Sie die Datei als Startzeitabhängigkeit von MongoDB
Wenn Sie die Änderungen sofort (vor dem nächsten Start) aktivieren möchten
Diese Lösung ist nicht für Ubuntu 14.04 geeignet, das anstelle von systemd die Init-Lösung von Upstart verwendet.
quelle
Fügen Sie die folgenden Zeilen in /etc/rc.local ein.
Dies wird ausgeführt, wenn Sie den Server neu starten.
quelle
rc.local
ist keine gute Idee, da rc.local am Ende des Systemstarts ausgeführt wird. Der Mongodb-Dienst verwendet daher weiterhin die Standardeinstellung./sys/kernel/mm/transparent_hugepage/defrag
? Beim Neustart sagt mir die Mongo-Shell außerdem: "** WARNUNG: / sys / kernel / mm / transparent_hugepage / defrag ist 'immer'."GRUB ändert sich nach dem Upgrade, und rc.local wird erst nach dem Start von mongo ausgeführt. Daher sollten wir am Ende von rc.local möglicherweise den Dienst mongo restart hinzufügen
oder hat jemand die obigen Zeilen erfolgreich zu init script in Ubuntu 14.04 hinzugefügt?
quelle
Da wir Computer mit Ansible bereitstellen, mag ich es nicht, RC-Dateien zu ändern.
Ich habe versucht,
sysfsutils
/ zu verwenden,sysfs.conf
aber beim Starten der Dienste auf schnellen (oder langsamen) Computern sind Zeitprobleme aufgetreten. 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/mongo_vm_settings.conf
mit dem folgenden Inhalt hinzuzufügen :Dadurch wird das Skript ausgeführt, kurz bevor Mongod gestartet wird. Mongod (
sudo service mongod restart
) neu starten und fertig.quelle
Nachdem ich ein wenig im
/etc/sysfs.conf
Warnprotokoll gelesen habe, habe ich diese beiden Zeilen in y voilá hinzugefügtStarten Sie den Computer neu, nachdem Sie diese Änderungen vorgenommen haben.
quelle
sysfsutils
Paket (siehe meine Antwort).