Come evitare gli avvisi di transparent_hugepage / defrag da mongodb?


96

Ricevo il seguente avviso da Mongodb riguardo alla 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'

Ma sono riuscito a disattivare THP manualmente

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

Ho fatto il trucco con l'aggiunta transparent_hugepage=neverdi GRUB_CMDLINE_LINUX_DEFAULTin /etc/default/grube l'aggiunta di

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

per /etc/rc.local

Come diavolo posso evitare l'avvertimento?


2
Ho avuto lo stesso problema, ma ho dimenticato di riavviare tutto, incluso mongod. So che potrebbe essere una domanda stupida, ma hai riavviato tutto?
Skooppa.com

1
aspetta ... intendevi riavviare il servizio mongod? oh ... sono corso sudo service mongod restarte l'avvertimento è appena sparito! Grazie! questo è strano, perché non riesco a riavviare la VM?
Frederick Zhang

1
Non sono sicuro del motivo per cui non si è ripreso al riavvio. Ma sì, intendevo riavviare il daemon. Sono contento che funzioni.
Skooppa.com

7
Questa non è una soluzione. Il motivo per cui vedi questo avviso dopo il riavvio è che il demone mongo viene avviato prima che il tuo rc.local sia stato eseguito. Il riavvio del demone dopo l'avvio del sistema risolve il problema, ma la prossima volta che riavvierai la VM vedrai di nuovo quel simpatico avviso. Sfortunatamente non posso darti la soluzione perché la sto ancora cercando.
SileNT

1
@ Frederick888 Anche se riavvii la VM? Il riavvio del servizio risolve l'avviso solo temporaneamente. Per maggiori dettagli controlla questo numero: jira.mongodb.org/browse/SERVER-17418
SileNT

Risposte:


161

La documentazione ufficiale di MongoDB offre diverse soluzioni a questo problema. Puoi anche provare questa soluzione , che ha funzionato per me:

Nota: prova le direttive della documentazione ufficiale se la versione di MongoDB è maggiore di 3.0

  1. Apri /etc/init.d/mongodfile.
    (se nessun file di questo tipo è possibile controllare /etc/init.d/mongod, /etc/init/mongod.conffile - credito: i commenti sotto)

  2. Aggiungi le righe seguenti immediatamente dopo chown $DAEMONUSER /var/run/mongodb.pide prima end script.

  3. Riavvia mongod( service mongod restart).

Ecco le righe da aggiungere a /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

Questo è tutto!


Mi dispiace di non aver accettato subito la tua risposta. Commento le righe che ho aggiunto a rc.local out e ho provato la tua soluzione, e ha funzionato anche per me. Grazie!
Frederick Zhang

6
beh, non ho trovato un file /etc/init/mongod.conf, ma ho aggiunto quelle righe nel file di script /etc/init.d/mongod, subito prima della riga echo "Starting ...", e funziona per me
Sagi Mann

2
soluzione fantastica! funziona su Ubuntu 14.04 e mongod 3.
void

1
Funziona, aggiungere una voce alternativa per /etc/init/mongod.conf per gli utenti di Ubuntu. gracias.
Jason Sebring

Sto usando mongodb su Ubuntu dove il mio file di configurazione è in formato YAML. Esiste una soluzione alternativa applicabile anche lì?
Pravesh Jain


10

Per Ubuntu 14.04 utilizzando upstart:

Dato che stiamo distribuendo macchine con Ansible, non mi piace modificare i file rc o le configurazioni di GRUB.

Ho provato a utilizzare sysfsutils/ sysfs.confma ho riscontrato problemi di temporizzazione all'avvio dei servizi su macchine veloci (o lente). Sembrava che a volte mongod fosse stato avviato prima di sysfsutils. A volte ha funzionato, a volte no.

Poiché mongod è un processo nuovo, ho scoperto che la soluzione più pulita era aggiungere il file /etc/init/mongod_vm_settings.confcon il seguente contenuto:

# 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

Questo eseguirà lo script appena prima che mongod venga avviato. Riavvia mongod ( sudo service mongod restart) e fatto.


8
  1. Apri / etc / default / grub

    sudo vi / etc / default / grub

  2. Aggiorna
    GRUB_CMDLINE_LINUX_DEFAULT = "" a GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = mai"

  3. Salva file
    : wq (in vi)
  4. Esegui update-grub

    sudo update-grub

  5. Riavvia la macchina

Aggiornamento: se si utilizza un provider di hosting virtuale, questo funzionerà È supportato l'avvio di grub IFF. DigitalOcean NON supporta l'avvio con grub.


1
Non funziona per me ... (Sì, ho la mia macchina Linux, con avvio grub) ... :(
Pierpaolo Cira

1
Nota che se stai utilizzando alcune delle soluzioni menzionate qui, su un sistema che funziona anche "sintonizzato", sintonizzato potrebbe sovrascrivere quelle soluzioni. Vedi qui per maggiori informazioni: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton

5

Verificato che la deframmentazione viene esaminata indipendentemente dall'abilitazione:

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

Pertanto, la correzione a questo bug è guardare prima a transparent_hugepage / enabled, e se non lo è mai, non preoccuparti di guardare l'impostazione trasparente_hugepage / defrag irrilevante.

Fonte .


Lavorando su Oracle Linux 7, la deframmentazione non è mai andata via dopo le modifiche consigliate .. finalmente un bel sospiro di sollievo !! questa risposta ha bisogno di più voti positivi !! Ho passato 4 ore a scavare questo.
Gnana

4

Ubuntu 16.04 utilizzando systemd:

systemctl edit mongod

Incolla quanto segue:

[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
ha lavorato anche per Centos 7 in /usr/lib/systemd/system/mongod.service
shortteps
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.