Używam mongodb 3.0 i widzę ostrzeżenie:
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
Próbuję użyć echa, ale nie jest to trwałe, po ponownym uruchomieniu zostanie zresetowane.
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Jak mogę zmienić na /sys/kernel/mm/transparent_hugepage/enabled
stałe?
Odpowiedzi:
Możesz
zainstaluj
sysfsutils
pakiet:i dodaj linię z tym ustawieniem, aby
/etc/sysfs.conf
:Jest to najczystsze rozwiązanie, ponieważ utrzymuje konfigurację sysfs w jednym miejscu zamiast polegać na niestandardowych skryptach startowych. Inne odpowiedzi, wraz ze skryptami i wyrażeniami warunkowymi, są odpowiednie, jeśli nie wiesz, przez którą ścieżkę jądro ujawni to ustawienie, tj. Jeśli nie masz pojęcia o wersji jądra działającej na zaatakowanym komputerze.
źródło
cat /sys/kernel/mm/transparent_hugepage/enabled
? Czy to w ogóle istnieje?sysfs.conf
jest zwykle oceniany przy starcie przez/etc/init.d/sysutils
. Czy to jest włączone? Co się dzieje, kiedy się wywołujesz/etc/init.d/sysutils start
?sysfs.conf
pliku i/etc/init.d/sysutils
. ubuntu 16.04sysctl
dotyczy ustawień, które można również osiągnąć za pomocą parametrów jądra;sysfs.conf
jest dla wpisów w/sys
.Dokumenty MongoDB mają kilka sugestii. http://docs.mongodb.org/manual/reference/transparent-huge-pages/
W „preferowane” sposobem jest edycja
/etc/default/grub
i dołączyćtransparent_hugepage=never
doGRUB_CMDLINE_LINUX_DEFAULT
uruchomupdate-grub
odbudować konfigurację GRUB.Następujący dwuwarstwowy tak właśnie zrobi. Upewnij się, aby zweryfikować dane wyjściowe!
Zauważ, że
update-grub
jest to opakowanie dlagrub-mkconfig
.grub-mkconfig
zablokuje wpisy/etc/default/grub
z tymi z/etc/default/grub.d/*
. Jeśli przypadkowo korzystasz z AWS, musisz zamiast tego dokonać edycji/etc/default/grub.d/50-cloudimg-settings.cfg
.Metodą „alternatywną” jest wcześniejsza edycja
/etc/rc.local
i dodanie następujących elementówexit 0
:Osobiście skończyłem, stosując metody „preferowane” i „alternatywne”, ponieważ nie wykluczają się one wzajemnie i eliminuje to ostrzeżenie o defragmentacji.
* Pracował dla mnie na Ubuntu 14.04, MongoDB 3.0.2 i AWS.
źródło
50-cloudimg-settings.cfg
Oto rozwiązanie, które zostało przetestowane pod kątem działania na Ubuntu 16.04 na AWS EC2. Ubuntu 16.04 używa systemowego systemu inicjującego, a ten plik konfiguracyjny wyraża konieczność zmiany tych ustawień przed uruchomieniem MongoDB.
Utwórz plik o nazwie
/etc/systemd/system/mongodb-hugepage-fix.service
i dodaj następującą treść:Aby załadować plik do systemd:
Aby aktywować plik jako zależność MongoDB od czasu uruchomienia
Jeśli chcesz aktywować zmiany natychmiast (przed następnym uruchomieniem)
To rozwiązanie nie jest odpowiednie dla Ubuntu 14.04, który korzysta z rozwiązania inicjującego Upstart zamiast systemd.
źródło
Dodaj poniższe wiersze do pliku /etc/rc.local.
Uruchomi się po ponownym uruchomieniu serwera.
źródło
rc.local
nie jest dobrym pomysłem, ponieważ rc.local wykona się pod koniec uruchamiania systemu. Tak więc usługa mongodb nadal będzie używać ustawienia domyślnego./sys/kernel/mm/transparent_hugepage/defrag
? Podczas ponownego uruchamiania powłoka mongo mówi mi również „** OSTRZEŻENIE: / sys / kernel / mm / transparent_hugepage / defrag is„ always ”.GRUB zmieni się po aktualizacji, a rc.local będzie działał tylko po uruchomieniu mongo, więc może powinniśmy dodać usługę restartu mongo na końcu rc.local w ten sposób
a może ktoś z powodzeniem dodał powyższe wiersze do skryptu inicjującego w Ubuntu 14.04?
źródło
Ponieważ wdrażamy maszyny z Ansible, nie lubię modyfikować plików rc.
Próbowałem użyć
sysfsutils
/,sysfs.conf
ale wystąpiły problemy z czasem podczas uruchamiania usług na szybkich (lub wolnych komputerach). Wyglądało na to, że czasami mongod był uruchamiany przed sysfsutils. Czasami działało, a czasem nie.Ponieważ mongod jest procesem przyspieszonym, odkryłem, że najczystszym rozwiązaniem było dodanie pliku
/etc/mongo_vm_settings.conf
o następującej treści:Spowoduje to uruchomienie skryptu tuż przed uruchomieniem mongod. Uruchom ponownie mongod (
sudo service mongod restart
) i gotowe.źródło
Po przeczytaniu trochę w dzienniku ostrzegawczym dodałem te dwie linie w
/etc/sysfs.conf
y voiláUruchom ponownie komputer po zastosowaniu tych zmian.
źródło
sysfsutils
pakietu (patrz moja odpowiedź).