Lancei algo que levou muita memória e agora tudo fica muito. Eu acho que a memória de todos os aplicativos foi trocada para liberar espaço para o processo intensivo de memória e agora tudo está retornando lentamente à RAM quando acessado.
Existe uma maneira de mover explicitamente todo o possível da troca de volta para a RAM? Ou talvez não tudo, mas apenas alguns dados de processos específicos?
swapoff
se a memória vai baixa: neste caso, o espaço de troca permanecerá funcional :)Você pode sintonizar o eco de algum número entre 0 e 100
/proc/sys/vm/swappiness
.fonte
sysctl
comando. Nesse caso, ésysctl vm.swappiness=x
.sysctl
comando de nível superior para a interação do usuário. O resultado final é o mesmo, mas geralmente as interfaces de nível superior são preferidas para o usuário interagir diretamente. É como ligar o motor em curto-circuito nos fios de ignição (nível inferior) em vez de apenas girar a chave (nível superior).O Linux faz um bom trabalho no gerenciamento de memória e você não deve ficar no caminho. A configuração vm.swappiness (mencionada anteriormente) não atrapalha. É mais provável que você tenha problemas estranhos ao fazer as coisas de outra maneira.
O que você lançou com tanta memória? Pode ser sintonizado? Se ele não possui suas próprias diretivas de limite de memória, você também pode examinar o ulimit.
fonte
convert -density 200 file.pdf jpegs/file.jpg
. Por alguma razão, ele usa muita memória, mas você está certo: pode ser ajustado. De qualquer forma, a situação é possível com qualquer aplicação :)convert
tem o-limit
argumento para controlar a memória versus o uso do disco, e você deve ler sobre eles. Cenário-limit memory 512MB
ou similar seria bom. Provavelmente também seria bom especificar um MAGICK_TEMPORARY_PATH explícito e limpá-lo após a conclusão do comando.Se você tiver memória disponível para todos os seus aplicativos, não há problema em definir o swappiness como 0 para que as coisas não sejam trocadas. Por exemplo, qemu-kvm é um grande alvo para o VMM ser trocado, porque "parece" ficar ocioso na maior parte do tempo. Eu vejo até 80% da memória de uma memória qemu-kvm ser gravada para trocar. As VMs em execução no qemu-kvm ficarão quase sem resposta porque estão ficando sem troca (embora o convidado não tenha ideia de que isso está acontecendo). A VM convidada pensará que está apresentando um desempenho excelente, embora na verdade esteja se arrastando terrivelmente. Quando várias VMs "acordam" e começam a fazer as coisas, elas podem aumentar a carga média em mais de 30, mesmo em hardware de nível empresarial com memória e disco rápidos e amplos. Eu acho que isso é uma falha no design qemu-kvm pronto para uso.
Espero que isso ajude alguém.
fonte
Eu desaconselharia a tentativa de superar o subsistema VM no kernel. É EXTREMAMENTE improvável que você realmente tenha informações suficientes para tomar decisões melhores do que elas. E se você forçar de alguma maneira a fazer a coisa errada, acabará tornando as coisas ainda mais lentas.
fonte
Se você é capaz de reiniciar o sistema que deve fazê-lo (e pode levar muito menos tempo do que tentar qualquer outra solução).
fonte
Para copiar parte da minha resposta desta pergunta .
Para que você saiba como o ajuste do swappiness funciona. Isso funciona dizendo ao subsistema da VM que procure páginas para trocar quando a% de memória mapeada para processar tabelas de páginas + valor de swappiness for> 100. Portanto, uma configuração de 60 fará com que o sistema comece a paginar páginas antigas da tabela de páginas do processo quando estiver usando mais de 40% da memória do seu sistema. Se você deseja permitir que seus programas usem mais memória às custas do cache, diminua o valor da troca.
fonte
O processo ainda está em execução? Abra um terminal e veja se consegue identificar o (s) processo (s) iniciado (s). (ps aux | grep nome do processo pode facilitar um pouco) Use kill -9 PID para eliminá-los se eles ainda estiverem em execução. Tenha cuidado com o que você mata. Se você não sabe qual é o processo, não o mate! Além disso, publique a saída do free -m para que possamos ver se você ainda está usando muito swap.
Se as coisas ainda estiverem lentas, você ainda pode ter o que lançou ainda em execução. Eu nunca desligaria a troca, a menos que você realmente saiba o que está fazendo ou gosta de viver no limite. =)
fonte
Acredito que não existe uma maneira realmente boa de forçar o Linux a desassociar dados do disco para a memória. Quando swapoff / swapon é uma solução funcional, mas está suja e pode facilmente tornar seu sistema instável. Nos casos em que há mais dados no swap do que memória livre, será difícil imaginar qualquer política eficiente que o Linux possa empregar para decidir quais partes dos dados serão transferidas para a memória e quais serão mantidas no disco.
Resumo: Apenas deixe o Linux gradualmente restaurar seu desempenho da maneira normal. Seu subsistema de VM é organizado de tal maneira que se esforça e se move constantemente para um estado equilibrado ideal.
fonte
Esvaziando o cache de buffers
Se você quiser esvaziá-los, poderá usar esta cadeia de comandos.
Você pode sinalizar ao Kernel do Linux para descartar vários aspectos dos itens em cache, alterando o argumento numérico para o comando acima.
NOTA: limpe a memória de coisas desnecessárias (Kernel 2.6.16 ou mais recente). Sempre execute a sincronização primeiro para liberar coisas úteis para o disco !!!
Para liberar pagecache:
Para liberar dentries e inodes:
Para liberar pagecache, dentries e inodes:
Os itens acima devem ser executados como root. Se você estiver tentando fazê-los usando o sudo, precisará alterar a sintaxe ligeiramente para algo como estes:
fonte