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

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 logré 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 al agregar transparent_hugepage=never a GRUB_CMDLINE_LINUX_DEFAULT en /etc/default/grub y agregando

 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 puedo evitar la advertencia?

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

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

  1. Abra el archivo /etc/init.d/mongod .
    (Si no hay tal archivo, puede verificar /etc/init.d/mongod , /etc/init/mongod.conf archivos – crédito: los comentarios a continuación)

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

  3. Reinicie mongod (reinicio mongod service mongod restart ).

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

¡Eso es!

MongoDB ha actualizado su recomendación de usar un script init.d ahora: http://docs.mongodb.org/master/tutorial/transparent-huge-pages/

Para Ubuntu 14.04 usando advenedizo:

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

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

Como mongod es un proceso advenedizo, encontré que la solución más limpia era agregar el archivo /etc/init/mongod_vm_settings.conf con 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 mongod se inicie. Reinicie mongod ( sudo service mongod restart ) y listo.

  1. Abre / etc / default / grub

    sudo vi / etc / default / grub

  2. Actualizar
    GRUB_CMDLINE_LINUX_DEFAULT = “” a GRUB_CMDLINE_LINUX_DEFAULT = “transparent_hugepage = never”

  3. Guardar el 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 arranque de arranque IFF. DigitalOcean NO es compatible con arranque de grub.

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

 $ 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 primero ver transparent_hugepage / enabled, y si nunca es así, no se moleste en mirar la configuración transparent_hugepage / defrag irrelevante.

Fuente

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"