web-dev-qa-db-fra.com

Comment éviter les avertissements de transparent_hugepage / defrag de mongodb?

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?

95
Frederick Zhang

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 .

  1. 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)

  2. Ajoutez les lignes ci-dessous immédiatement après chown $DAEMONUSER /var/run/mongodb.pid et avant end script.

  3. Redémarrez 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!

161
efkan

MongoDB a mis à jour sa recommandation d'utiliser maintenant un script init.d : http://docs.mongodb.org/master/tutorial/ transparent-huge-pages /

24
robbie613

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é.

10
Whyhankee
  1. Ouvrez/etc/default/grub

    Sudo vi/etc/default/grub

  2. Mise à jour
    GRUB_CMDLINE_LINUX_DEFAULT = "" à GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = jamais"

  3. Enregistrer le fichier
    : wq (en vi)
  4. Lancer update-grub

    Sudo update-grub

  5. 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.

8
clrho

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 .

5

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"
2
snap