Yo uso mongodb 3.0 y encuentro una advertencia:
MongoDB shell version: 3.0.0
connecting to: test
Server has startup warnings:
2015-03-13T16:28:29.405+0800 I CONTROL [initandlisten]
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-13T16:28:29.406+0800 I CONTROL [initandlisten]
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2015-03-13T16:28:29.407+0800 I CONTROL [initandlisten]
~# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
~# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
Intento usar echo, pero no es permanente, después de reiniciar se restablecerá.
echo never > /sys/kernel/mm/transparent_hugepage/defrag
¿Cómo modifico /sys/kernel/mm/transparent_hugepage/enabled
permanentemente?
Respuestas:
Usted puede
instale el
sysfsutils
paquete:y agregue una línea con esa configuración a
/etc/sysfs.conf
:Esta es la solución más limpia, porque mantiene toda la configuración de sysfs en un solo lugar en lugar de depender de scripts de inicio personalizados. Las otras respuestas, con los scripts y las expresiones condicionales, son adecuadas si no sabe a través de qué ruta el kernel expondrá esa configuración, es decir, si ni siquiera tiene una idea aproximada de la versión del kernel que se ejecuta en la máquina afectada.
fuente
cat /sys/kernel/mm/transparent_hugepage/enabled
? ¿Existe en absoluto?sysfs.conf
normalmente se evalúa en el arranque por/etc/init.d/sysutils
. ¿Está habilitado? ¿Qué sucede cuando invocas/etc/init.d/sysutils start
?sysfs.conf
archivo y/etc/init.d/sysutils
. ubuntu 16.04sysctl
es para configuraciones que también podría lograr con los parámetros del kernel;sysfs.conf
es para entradas en/sys
.Los documentos de MongoDB tienen algunas sugerencias. http://docs.mongodb.org/manual/reference/transparent-huge-pages/
La forma "preferida" es editar
/etc/default/grub
y agregartransparent_hugepage=never
yGRUB_CMDLINE_LINUX_DEFAULT
luego ejecutarupdate-grub
para reconstruir la configuración de GRUB.El siguiente dos líneas hará exactamente eso. ¡Asegúrese de verificar la salida!
Tenga en cuenta que
update-grub
es un contenedor paragrub-mkconfig
.grub-mkconfig
golpeará las entradas/etc/default/grub
con las de/etc/default/grub.d/*
. Si por casualidad se está ejecutando en AWS, deberá editar en su lugar/etc/default/grub.d/50-cloudimg-settings.cfg
.El método "alternativo" es editar
/etc/rc.local
y agregar lo siguiente antesexit 0
:Personalmente, terminé haciendo los métodos "preferidos" y "alternativos" ya que no son mutuamente excluyentes y elimina la advertencia sobre la desfragmentación.
* Me funcionó en Ubuntu 14.04, MongoDB 3.0.2 y AWS.
fuente
50-cloudimg-settings.cfg
Aquí hay una solución que ha sido probada para funcionar en Ubuntu 16.04 en AWS EC2. Ubuntu 16.04 usa el sistema systemd init, y este archivo de configuración expresa que esta configuración debe cambiarse antes de que se inicie MongoDB.
Cree un archivo llamado
/etc/systemd/system/mongodb-hugepage-fix.service
y agregue el siguiente contenido:Para cargar el archivo en systemd:
Para activar el archivo como una dependencia del tiempo de arranque de MongoDB
Si desea activar los cambios inmediatamente (antes del próximo arranque)
Esta solución no es adecuada para Ubuntu 14.04, que usa la solución de inicio Upstart en lugar de systemd.
fuente
Agregue las siguientes líneas a continuación en /etc/rc.local.
Esto se ejecutará cuando reinicie el servidor.
fuente
rc.local
no es una buena idea, porque rc.local se ejecutará al final del inicio del sistema. Por lo tanto, el servicio mongodb seguirá utilizando la configuración predeterminada./sys/kernel/mm/transparent_hugepage/defrag
? Cuando reinicio, mongo shell también me dice "** ADVERTENCIA: / sys / kernel / mm / transparent_hugepage / defrag es 'siempre'".GRUB cambiará después de la actualización, y rc.local se ejecutará solo después de que se inicie mongo, por lo que tal vez deberíamos agregar el servicio de reinicio de mongo al final de rc.local de esta manera
¿O tal vez alguien agregó con éxito las líneas anteriores al script de inicio en Ubuntu 14.04?
fuente
Como estamos implementando máquinas con Ansible, no me gusta modificar archivos rc.
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 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/mongo_vm_settings.conf
con el siguiente contenido:Esto ejecutará el script justo antes de que se inicie mongod. Reinicie mongod (
sudo service mongod restart
) y listo.fuente
Después de leer un poco en el registro de advertencia, he agregado estas dos líneas en
/etc/sysfs.conf
y voiláReinicie la máquina después de aplicar estos cambios.
fuente
sysfsutils
paquete (ver mi respuesta).