linux - remota - cat sys kernel mm transparent_hugepage enabled
¿Cómo evitar la advertencia transparent_hugepage/defrag de mongodb? (6)
-
Abrir / etc / default / grub
sudo vi / etc / default / grub
-
Actualizar
GRUB_CMDLINE_LINUX_DEFAULT = "" a GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = nunca" -
Guardar el archivo
: wq (en vi) -
Ejecute update-grub
sudo update-grub
-
Reiniciar la máquina
Actualización: si está utilizando un proveedor de alojamiento virtual, esto funcionará. DigitalOcean NO admite arranque de grub.
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 el 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 agregando
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?
MongoDB ha actualizado su recomendación de utilizar un script init.d ahora: http://docs.mongodb.org/master/tutorial/transparent-huge-pages/
Para Ubuntu 14.04 usando upstart:
Como estamos implementando máquinas con Ansible, no me gusta modificar archivos rc o configuraciones GRUB.
Intenté usar
sysfsutils
/
sysfs.conf
pero 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 funcionaba, a veces no.
Como mongod es un proceso inicial, descubrí 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 se inicie mongod.
Reinicie mongod (
sudo service mongod restart
) y listo.
Ubuntu 16.04 usando systemd:
systemctl edit mongod
Pegue 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"
Verificado que la desfragmentación se examine sin tener en cuenta lo 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 transparent_hugepage / enabled, y si nunca lo está, no se moleste en mirar la configuración irrelevante transparent_hugepage / defrag.
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 de MongoDB es superior a la 3.0
-
Abra el archivo
/etc/init.d/mongod
.
(si no existe dicho archivo, puede consultar los archivos/etc/init.d/mongod
,/etc/init/mongod.conf
- crédito: los comentarios a continuación) -
Agregue las líneas a continuación inmediatamente después de
chown $DAEMONUSER /var/run/mongodb.pid
y antes deend script
. -
Reinicie
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!