Jak uniknąć ostrzeżenia transparent_hugepage / defrag z mongodb?

96

Otrzymuję następujące ostrzeżenie od mongodb o 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'

Ale udało mi się ręcznie wyłączyć 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]

Zrobiłem podstęp dodając transparent_hugepage=neverdo GRUB_CMDLINE_LINUX_DEFAULTw /etc/default/grubi dodawanie

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

do /etc/rc.local

Jak u licha mogę uniknąć ostrzeżenia?

Frederick Zhang
źródło
2
Miałem ten sam problem, ale zapomniałem zrestartować wszystko, w tym mongod. Wiem, że to może być głupie pytanie, ale czy zrestartowałeś wszystko?
Skooppa.com
1
czekaj ... miałeś na myśli ponowne uruchomienie usługi Mongod? och ... Pobiegłem sudo service mongod restarti ostrzeżenie po prostu zniknęło! dzięki! to jest dziwne, dlaczego nie mogę po prostu ponownie uruchomić maszyny wirtualnej?
Frederick Zhang
1
Nie jestem pewien, dlaczego nie złapał przy ponownym uruchomieniu. Ale tak, miałem na myśli ponowne uruchomienie demona. Cieszę się, że działa.
Skooppa.com
7
To nie jest rozwiązanie. Powodem, dla którego widzisz to ostrzeżenie po restarcie, jest to, że demon mongo został uruchomiony przed wykonaniem rc.local. Ponowne uruchomienie demona po uruchomieniu systemu rozwiązuje problem, ale następnym razem po ponownym uruchomieniu maszyny wirtualnej ponownie zobaczysz to miłe ostrzeżenie. Niestety nie mogę podać rozwiązania, ponieważ wciąż go szukam.
SileNT
1
@ Frederick888 Nawet jeśli ponownie uruchomisz maszynę wirtualną? Ponowne uruchomienie usługi rozwiązuje ostrzeżenie tylko tymczasowo. Więcej informacji można znaleźć w tym numerze: jira.mongodb.org/browse/SERVER-17418
SileNT

Odpowiedzi:

161

Oficjalna dokumentacja MongoDB zawiera kilka rozwiązań tego problemu. Możesz także wypróbować to rozwiązanie , które u mnie zadziałało:

Uwaga: wypróbuj dyrektywy oficjalnej dokumentacji, jeśli wersja MongoDB jest większa niż 3.0

  1. Otwórz /etc/init.d/mongodplik.
    (jeśli nie ma takiego pliku to możesz sprawdzić /etc/init.d/mongod, /etc/init/mongod.confpliki - kredyt: poniższe komentarze)

  2. Dodaj poniższe wiersze bezpośrednio po chown $DAEMONUSER /var/run/mongodb.pidi przed end script.

  3. Uruchom ponownie mongod( service mongod restart).

Oto linie, do których należy dodać /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

Otóż ​​to!

efkan
źródło
Przepraszam, że nie przyjąłem Twojej odpowiedzi od razu. Komentuję linie, które dodałem do rc.local out i wypróbowałem twoje rozwiązanie, i to zadziałało również dla mnie. Dzięki!
Frederick Zhang
6
no cóż, nie znalazłem pliku /etc/init/mongod.conf, ale dodałem te linie do pliku skryptowego /etc/init.d/mongod, tuż przed linią echo „Starting ...” i działa dla mnie
Sagi Mann
2
super rozwiązanie! działa na Ubuntu 14.04 i mongod 3.
void
1
To działa, dodaj alternatywny wpis dla /etc/init/mongod.conf dla użytkowników Ubuntu. gracias.
Jason Sebring
Używam mongodb na Ubuntu, gdzie mój plik conf jest w formacie YAML. Czy można tam również zastosować alternatywne rozwiązanie?
Pravesh Jain
10

W przypadku Ubuntu 14.04 przy użyciu upstart:

Ponieważ wdrażamy maszyny z Ansible, nie lubię modyfikować plików rc ani konfiguracji GRUB.

Próbowałem używać sysfsutils/ sysfs.confale napotkałem problemy z synchronizacją podczas uruchamiania usług na szybkich (lub wolnych komputerach). Wyglądało na to, że czasami mongod był uruchamiany przed sysfsutils. Czasami to działało, czasami nie.

Ponieważ mongod jest początkowym procesem, stwierdziłem, że najczystszym rozwiązaniem jest dodanie pliku /etc/init/mongod_vm_settings.confo następującej treści:

# 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

Spowoduje to uruchomienie skryptu tuż przed uruchomieniem mongod. Uruchom ponownie mongod ( sudo service mongod restart) i gotowe.

Dlaczegohankee
źródło
8
  1. Otwórz / etc / default / grub

    sudo vi / etc / default / grub

  2. Zaktualizuj
    GRUB_CMDLINE_LINUX_DEFAULT = „” do GRUB_CMDLINE_LINUX_DEFAULT = „transparent_hugepage = nigdy”

  3. Zapisz plik
    : wq (w vi)
  4. Uruchom update-grub

    sudo update-grub

  5. Uruchom ponownie maszynę

Aktualizacja: Jeśli korzystasz z wirtualnego dostawcy hostingu, to zadziała. DigitalOcean NIE obsługuje bootowania grub.

clrho
źródło
1
To nie działa na mnie ... (Tak, mam własną maszynę Linux, z grub bagażniku) ... :(
PIERPAOLO Cira
1
Zwróć uwagę, że jeśli używasz niektórych z wymienionych tutaj rozwiązań, w systemie, który również działa `` dostrojony '', dostrojony może zastąpić te rozwiązania. Zobacz tutaj, aby uzyskać więcej informacji: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton
5

Zweryfikowano, że defragmentacja jest badana bez względu na włączone:

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

Dlatego naprawa tego błędu polega na tym, aby najpierw spojrzeć na transparent_hugepage / enabled, a jeśli nigdy nie jest, nie przejmuj się patrzeniem na nieistotne ustawienie transparent_hugepage / defrag.

Źródło .

Michael Horojanski
źródło
Pracując na Oracle Linux 7, defrag nigdy nie zniknął po zalecanych zmianach… w końcu wielkie westchnienie ulgi !! ta odpowiedź wymaga więcej głosów! Spędziłem 4 godziny, kopiąc to.
Gnana
4

Ubuntu 16.04 przy użyciu systemd:

systemctl edit mongod

Wklej następujące:

[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"
kłapnięcie
źródło
1
również pracował dla Centos 7 w /usr/lib/systemd/system/mongod.service
shortsteps