Je reçois l'avertissement suivant de mongodb à propos de 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'
Mais j'ai réussi à désactiver manuellement THP
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
J'ai fait le tour en ajoutant transparent_hugepage=never
à GRUB_CMDLINE_LINUX_DEFAULT
dans /etc/default/grub
et en ajoutant
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
à /etc/rc.local
Comment sur terre puis-je éviter l'avertissement?
Documentation officielle de MongoDB donne plusieurs solutions à ce problème. Vous pouvez aussi essayer cette solution , ce qui a fonctionné pour moi:
Remarque: essayez les directives de la documentation officielle si la version de MongoDB est supérieure à 3.0 .
Ouvrez le fichier /etc/init.d/mongod
.
(si aucun fichier de ce type, vous pouvez vérifier les fichiers /etc/init.d/mongod
, /etc/init/mongod.conf
- crédit: les commentaires ci-dessous)
Ajoutez les lignes ci-dessous immédiatement après chown $DAEMONUSER /var/run/mongodb.pid
et avant end script
.
mongod
(service mongod restart
).Voici les lignes à ajouter à /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
C'est ça!
MongoDB a mis à jour sa recommandation d'utiliser maintenant un script init.d : http://docs.mongodb.org/master/tutorial/ transparent-huge-pages /
Pour Ubuntu 14.04 en utilisant upstart:
Puisque nous déployons des machines avec Ansible, je n’aime pas modifier les fichiers rc ni les configs GRUB.
J'ai essayé d'utiliser sysfsutils
/sysfs.conf
, mais des problèmes de synchronisation se sont produits lors du démarrage des services sur des machines rapides (ou lentes). Il semblait que parfois mongod avait commencé avant sysfsutils. Parfois cela fonctionnait, parfois non.
Comme mongod est un processus qui a démarré, j'ai trouvé que la solution la plus propre était d'ajouter le fichier /etc/init/mongod_vm_settings.conf
avec le contenu suivant:
# 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
Cela exécutera le script juste avant que mongod ne soit lancé. Redémarrez Mongod (Sudo service mongod restart
) et c'est terminé.
Ouvrez/etc/default/grub
Sudo vi/etc/default/grub
Mise à jour
GRUB_CMDLINE_LINUX_DEFAULT = "" à GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = jamais"
Lancer update-grub
Sudo update-grub
Redémarrer la machine
Mise à jour: Si vous utilisez un fournisseur d'hébergement virtuel, cela fonctionnera. Le démarrage grub IFF est pris en charge. DigitalOcean NE prend PAS en charge le démarrage grub.
Vérifié que la défragmentation est examinée sans tenir compte de la validation:
$ 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)
Par conséquent, la solution à ce bogue est de commencer par regarder transparent_hugepage/enabled, et si ce n’est jamais le cas, ne cherchez pas plus loin le paramètre non pertinent transparent_hugepage/defrag.
Source .
Ubuntu 16.04 utilisant systemd:
systemctl edit mongod
Collez ce qui suit:
[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"