¿Cómo evitar la advertencia de transparent_hugepage / defrag de mongodb?

96

Recibo la siguiente advertencia de mongodb sobre 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'

Pero me las arreglé para apagar 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]

Hice el truco añadiendo transparent_hugepage=nevera GRUB_CMDLINE_LINUX_DEFAULTen /etc/default/gruby añadiendo

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

a /etc/rc.local

¿Cómo diablos puedo evitar la advertencia?

Frederick Zhang
fuente
2
Tuve el mismo problema, pero olvidé reiniciar todo, incluido mongod. Sé que puede ser una pregunta estúpida, pero ¿reiniciaste todo?
Skooppa.com
1
espera ... ¿te refieres a reiniciar el servicio mongod? oh ... corrí sudo service mongod restarty la advertencia se fue! ¡Gracias! esto es extraño, ¿por qué no puedo simplemente reiniciar la máquina virtual?
Frederick Zhang
1
No estoy seguro de por qué no se detectó al reiniciar. Pero sí, me refiero a reiniciar el daemon. Me alegro de que esté funcionando.
Skooppa.com
7
Esta no es una solución. La razón por la que ve esta advertencia después de reiniciar es que el demonio mongo se inicia antes de que se haya ejecutado rc.local. Reiniciar el demonio después del inicio del sistema resuelve el problema, pero la próxima vez que reinicie su máquina virtual, verá esa advertencia agradable nuevamente. Lamentablemente, no puedo darte la solución porque todavía la estoy buscando.
SileNT
1
@ Frederick888 ¿Incluso si reinicia la máquina virtual? Reiniciar el servicio resuelve la advertencia de forma temporal. Para obtener más detalles, consulte este número: jira.mongodb.org/browse/SERVER-17418
SileNT

Respuestas:

161

La documentación oficial de MongoDB ofrece varias soluciones para este problema. También puede probar esta solución , que funcionó para mí:

Nota: Pruebe las directivas de documentación oficial si la versión de MongoDB es superior a 3.0

  1. Abrir /etc/init.d/mongodarchivo.
    (si no existe tal archivo se podría verificar /etc/init.d/mongod, /etc/init/mongod.confarchivos - de crédito: el siguiente comentarios)

  2. Agregue las líneas a continuación inmediatamente después chown $DAEMONUSER /var/run/mongodb.pidy antes end script.

  3. Reiniciar mongod( service mongod restart).

Aquí están las líneas para agregar /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

¡Eso es!

efkan
fuente
Lamento no haber aceptado tu respuesta de inmediato. Comenté las líneas que agregué a rc.local y probé su solución, y también funcionó para mí. ¡Gracias!
Frederick Zhang
6
bueno, no encontré un archivo /etc/init/mongod.conf, pero agregué esas líneas en el archivo de script /etc/init.d/mongod, justo antes de la línea de eco "Iniciando ...", y funciona para mí
Sagi Mann
2
increíble solución! funciona en Ubuntu 14.04 y mongod 3.
void
1
Esto funciona, agregue una entrada alternativa para /etc/init/mongod.conf para usuarios de Ubuntu. gracias.
Jason Sebring
Estoy usando mongodb en ubuntu donde mi archivo conf está en formato YAML. ¿Existe una solución alternativa aplicable allí también?
Pravesh Jain
10

Para Ubuntu 14.04 usando upstart:

Dado que estamos implementando máquinas con Ansible, no me gusta modificar archivos rc o configuraciones de GRUB.

Intenté usar sysfsutils/ sysfs.confpero encontré problemas de sincronización al iniciar los servicios en máquinas rápidas (o lentas). Parecía que a veces mongod se iniciaba antes que sysfsutils. A veces funcionó, a veces no.

Dado que mongod es un proceso advenedizo, descubrí que la solución más limpia era agregar el archivo /etc/init/mongod_vm_settings.confcon el siguiente contenido:

# 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

Esto ejecutará el script justo antes de que se inicie mongod. Reinicie mongod ( sudo service mongod restart) y listo.

Gracias
fuente
8
  1. Abra / etc / default / grub

    sudo vi / etc / default / grub

  2. Actualice
    GRUB_CMDLINE_LINUX_DEFAULT = "" a GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"

  3. Guardar archivo
    : wq (en vi)
  4. Ejecute update-grub

    sudo update-grub

  5. Reiniciar la máquina

Actualización: si está utilizando un proveedor de alojamiento virtual, esto funcionará. Se admite el arranque de grub IFF. DigitalOcean NO admite arranque grub.

clrho
fuente
1
No funciona para mí ... (Sí, tengo mi propia máquina Linux, con arranque grub) ... :(
Pierpaolo Cira
1
Tenga en cuenta que si está utilizando algunas de las soluciones mencionadas aquí, en un sistema que también se ejecuta 'tuned', tuned puede anular esas soluciones. Consulte aquí para obtener más información:
bugzilla.redhat.com/show_bug.cgi?id=1189868
5

Verificado que la desfragmentación se examina sin tener en cuenta el habilitado:

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

Por lo tanto, la solución a este error es mirar primero a transparent_hugepage / enabled, y si nunca es así, no se moleste en mirar la configuración irrelevante de transparent_hugepage / defrag.

Fuente .

Michael Horojanski
fuente
Trabajando en Oracle Linux 7, la desfragmentación nunca desapareció después de los cambios recomendados ... ¡finalmente un gran suspiro de alivio! esta respuesta necesita más votos positivos !! Pasé 4 horas investigando esto.
Gnana
4

Ubuntu 16.04 usando systemd:

systemctl edit mongod

Pega lo siguiente:

[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"
chasquido
fuente
1
también trabajó para Centos 7 en
/usr/lib/systemd/system/mongod.service