Uso o mongodb 3.0 e encontro um aviso:
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
Eu tento usar o eco, mas não é permanente; após a reinicialização, ele será redefinido.
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Como faço para modificar /sys/kernel/mm/transparent_hugepage/enabled
permanentemente?
Respostas:
Você pode
instale o
sysfsutils
pacote:e acrescente uma linha com essa configuração a
/etc/sysfs.conf
:Esta é a solução mais limpa, porque mantém toda a configuração do sysfs em um só lugar, em vez de depender de scripts de inicialização personalizados. As outras respostas, com os scripts e expressões condicionais, são adequadas se você não souber por qual caminho o kernel irá expor essa configuração, ou seja, se você não tiver uma idéia aproximada da versão do kernel em execução na máquina afetada.
fonte
cat /sys/kernel/mm/transparent_hugepage/enabled
? Existe mesmo?sysfs.conf
é normalmente avaliado na inicialização por/etc/init.d/sysutils
. Está habilitado? O que acontece quando você invoca/etc/init.d/sysutils start
?sysfs.conf
arquivo e/etc/init.d/sysutils
. Ubuntu 16.04sysctl
é para configurações que você também pode obter com os parâmetros do kernel;sysfs.conf
é para entradas em/sys
.Os documentos do MongoDB têm algumas sugestões. http://docs.mongodb.org/manual/reference/transparent-huge-pages/
A maneira "preferida" é editar
/etc/default/grub
e acrescentartransparent_hugepage=never
eGRUB_CMDLINE_LINUX_DEFAULT
depois executarupdate-grub
para reconstruir a configuração do GRUB.A seguinte linha dupla fará exatamente isso. Certifique-se de verificar a saída!
Observe que
update-grub
é um invólucro paragrub-mkconfig
.grub-mkconfig
trará entradas/etc/default/grub
com as de/etc/default/grub.d/*
. Se, por acaso, você estiver executando na AWS, precisará editar/etc/default/grub.d/50-cloudimg-settings.cfg
.O método "alternativo" é editar
/etc/rc.local
e adicionar o seguinte antesexit 0
:Pessoalmente, acabei fazendo os métodos "preferido" e "alternativo", pois eles não são mutuamente exclusivos e elimina o aviso sobre desfragmentação.
* Trabalhou para mim no Ubuntu 14.04, MongoDB 3.0.2 e AWS.
fonte
50-cloudimg-settings.cfg
Aqui está uma solução que foi testada para funcionar no Ubuntu 16.04 no AWS EC2. O Ubuntu 16.04 usa o sistema systemd init, e esse arquivo de configuração expressa que essas configurações devem ser alteradas antes da inicialização do MongoDB.
Crie um arquivo nomeado
/etc/systemd/system/mongodb-hugepage-fix.service
e adicione o seguinte conteúdo:Para carregar o arquivo no systemd:
Para ativar o arquivo como uma dependência do MongoDB no momento da inicialização
Se você deseja ativar as alterações imediatamente (antes da próxima inicialização)
Esta solução não é adequada para o Ubuntu 14.04, que usa a solução init Upstart em vez do systemd.
fonte
Anexe as seguintes linhas abaixo em /etc/rc.local.
Isso será executado quando você reiniciar o servidor.
fonte
rc.local
não é uma boa ideia, porque o rc.local será executado no final da inicialização do sistema. Portanto, o serviço mongodb ainda utilizará a configuração padrão./sys/kernel/mm/transparent_hugepage/defrag
? Quando eu reinicio, o mongo shell também me diz "** AVISO: / sys / kernel / mm / transparent_hugepage / defrag é 'sempre'".O GRUB mudará após a atualização e o rc.local será executado somente após o mongo ser iniciado, portanto, talvez devamos adicionar o serviço mongo restart no final do rc.local como este
ou talvez alguém tenha adicionado com sucesso as linhas acima para iniciar o script no Ubuntu 14.04?
fonte
Como estamos implantando máquinas com o Ansible, não gosto de modificar arquivos rc.
Tentei usar
sysfsutils
/sysfs.conf
mas tive problemas de tempo ao iniciar os serviços em máquinas rápidas (ou lentas). Às vezes, parecia que o mongod foi iniciado antes do sysfsutils. Às vezes funcionou, às vezes não.Como o mongod é um processo inicial, descobri que a solução mais limpa era adicionar o arquivo
/etc/mongo_vm_settings.conf
com o seguinte conteúdo:Isso executará o script imediatamente antes do mongod ser iniciado. Reinicie o mongod (
sudo service mongod restart
) e pronto.fonte
Depois de ler um pouco no log de aviso, adicionei essas duas linhas em
/etc/sysfs.conf
y voiláReinicie a máquina depois de aplicar essas alterações.
fonte
sysfsutils
pacote (veja minha resposta).