Como evitar o aviso de transparent_hugepage / defrag do mongodb?

96

Estou recebendo o seguinte aviso 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'

Mas consegui desligar o 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]

I fez o truque, adicionando transparent_hugepage=nevera GRUB_CMDLINE_LINUX_DEFAULTem /etc/default/grube adicionando

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

para /etc/rc.local

Como posso evitar o aviso?

Frederick Zhang
fonte
2
Eu tive o mesmo problema, mas esqueci de reiniciar tudo, incluindo o mongod. Eu sei que pode ser uma pergunta estúpida, mas você reiniciou tudo?
Skooppa.com
1
espere ... você quis dizer reiniciar o serviço mongod? oh ... eu corri sudo service mongod restarte o aviso sumiu! obrigado! isso é estranho, por que não posso simplesmente reiniciar a VM?
Frederick Zhang
1
Não tenho certeza por que ele não travou na reinicialização. Mas sim, eu quis dizer reiniciar o daemon. Ainda bem que está funcionando.
Skooppa.com
7
Esta não é uma solução. A razão pela qual você vê este aviso após a reinicialização é que o daemon mongo é iniciado antes que seu rc.local seja executado. Reiniciar o daemon após a inicialização do sistema resolve o problema, mas da próxima vez, quando você reiniciar sua VM, você verá aquele belo aviso novamente. Infelizmente, não posso dar a solução porque ainda estou procurando por ela.
SileNT
1
@ Frederick888 Mesmo se você reiniciar a VM? Reiniciar o serviço resolve o aviso apenas temporário. Para mais detalhes, verifique este problema: jira.mongodb.org/browse/SERVER-17418
SileNT

Respostas:

161

A documentação oficial do MongoDB oferece várias soluções para esse problema. Você também pode tentar esta solução , que funcionou para mim:

Observação: tente as diretivas de documentação oficial se a versão do MongoDB for superior a 3.0

  1. Abra o /etc/init.d/mongodarquivo.
    (se não houver tal arquivo, você deve verificar /etc/init.d/mongod, /etc/init/mongod.confarquivos - crédito: os comentários abaixo)

  2. Adicione as linhas abaixo imediatamente chown $DAEMONUSER /var/run/mongodb.pidantes e depois end script.

  3. Reiniciar mongod( service mongod restart).

Aqui estão as linhas a serem adicionadas /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

É isso aí!

efkan
fonte
Desculpe não ter aceitado sua resposta imediatamente. Comento as linhas que adicionei ao rc.local out e tentei sua solução, e funcionou para mim também. Obrigado!
Frederick Zhang,
6
bem, não encontrei um arquivo /etc/init/mongod.conf, mas adicionei essas linhas ao arquivo de script /etc/init.d/mongod, logo antes da linha echo "Iniciando ..." e funciona para mim
Sagi Mann
2
solução incrível! funciona no Ubuntu 14.04 e mongod 3.
void
1
Isso funciona, por favor adicione uma entrada alternativa para /etc/init/mongod.conf para usuários do Ubuntu. gracias.
Jason Sebring
Estou usando o mongodb no ubuntu, onde meu arquivo conf está no formato YAML. Existe uma solução alternativa aplicável lá também?
Pravesh Jain
10

Para Ubuntu 14.04 usando upstart:

Como estamos implantando máquinas com Ansible, não gosto de modificar arquivos rc ou configurações do GRUB.

Tentei usar sysfsutils/, sysfs.confmas tive problemas de tempo ao iniciar os serviços em máquinas rápidas (ou lentas). Parecia que às vezes o mongod era iniciado antes do sysfsutils. Às vezes funcionava, às vezes não.

Como mongod é um processo inicial, descobri que a solução mais limpa era adicionar o arquivo /etc/init/mongod_vm_settings.conf com o seguinte conteúdo:

# 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

Isso executará o script antes de iniciar o mongod. Reinicie o mongod ( sudo service mongod restart) e pronto.

Whyhankee
fonte
8
  1. Abra / etc / default / grub

    sudo vi / etc / default / grub

  2. Atualize
    GRUB_CMDLINE_LINUX_DEFAULT = "" para GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = nunca"

  3. Salvar arquivo
    : wq (in vi)
  4. Execute update-grub

    sudo update-grub

  5. Reiniciar máquina

Atualização: Se você estiver usando um provedor de hospedagem virtual, isso funcionará. A inicialização do grub IFF é compatível. DigitalOcean NÃO suporta inicialização grub.

clrho
fonte
1
Não funciona para mim ... (Sim, tenho minha própria máquina Linux, com inicialização grub) ... :(
Pierpaolo Cira
1
Observe que se você estiver usando algumas das soluções mencionadas aqui, em um sistema que também executa 'tuned', tuned pode substituir essas soluções. Veja aqui para mais informações: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton
5

Verificou-se que a desfragmentação é examinada independentemente do 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)

Portanto, a correção para este bug é olhar primeiro para transparent_hugepage / enabled, e se nunca, não se preocupe em olhar para a configuração irrelevante de transparent_hugepage / defrag.

Fonte .

Michael Horojanski
fonte
Trabalhando no Oracle Linux 7, a desfragmentação nunca foi embora após as alterações recomendadas .. finalmente, um grande suspiro de alívio !! esta resposta precisa de mais votos positivos !! Passei 4 horas cavando isso.
Gnana
4

Ubuntu 16.04 usando systemd:

systemctl edit mongod

Cole a seguinte:

[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"
estalo
fonte
1
trabalhou para Centos 7 em /usr/lib/systemd/system/mongod.service também
shortsteps