Linux: como explodir explicitamente tudo o que é possível?

56

Eu lancei algo que levou muita memória e agora tudo fica muito atrasado. Eu acho que a memória de todos os aplicativos foi trocada para liberar algum espaço para o processo intensivo de memória, e agora tudo está retornando lentamente à RAM quando acessado.

Existe uma maneira de mover explicitamente tudo o que é possível de swap de volta para RAM? Ou talvez não tudo, mas apenas alguns dados de processos particulares?

    
por kolypto 07.02.2010 / 19:24

10 respostas

56

Eu recomendaria permitir a troca normal de controle de memória do Linux nas coisas que são realmente usadas, como elas são usadas.

A única coisa que consigo pensar é desativar a troca e, em seguida, novamente

sudo swapoff -a
sudo swapon -a

Isso pressupõe que você tenha memória física suficiente para conter tudo em troca ...

    
por 07.02.2010 / 19:38
11

Você pode ajustá-lo fazendo eco de um número entre 0 e 100 para /proc/sys/vm/swappiness .

This control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap. A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.

The default value is 60.

    
por 07.02.2010 / 19:31
5

O Linux faz um ótimo trabalho gerenciando a memória e você não deve ficar no seu caminho. A configuração vm.swappiness (mencionada anteriormente) não atrapalha. É mais provável que você tenha problemas estranhos fazendo as coisas de outra maneira.

O que você lançou com tanta fome de memória? Pode ser sintonizado? Se não tiver suas próprias diretivas de limite de memória, você também poderá ver ulimit.

    
por 08.02.2010 / 04:25
3

Se você tiver a 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, o qemu-kvm é um grande alvo para o VMM ser trocado, porque "parece" estar inativo a 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 swap (embora o convidado não tenha ideia de que isso está acontecendo). A MV convidada vai pensar que está se apresentando de maneira excelente, mesmo que na verdade esteja se arrastando terrivelmente. Quando eu faço um monte de VMs "acordar" e começar a fazer coisas, isso pode aumentar a carga média em mais de 30, mesmo em hardware de nível corporativo com muita memória e disco. Eu acho que isso é uma falha no design qemu-kvm out-of-the-box.

Espero que isso ajude alguém.

    
por 17.07.2011 / 15:33
1

Se você puder reinicializar o sistema que deve fazê-lo (e levar menos tempo do que tentar qualquer outra solução)

    
por 08.02.2010 / 00:46
1

Para copiar algumas de minhas respostas de esta pergunta .

Para que você saiba como o ajuste do swappiness funciona. Isso funciona dizendo ao subsistema da máquina virtual para procurar páginas para trocar quando o% de memória mapeada para processar tabelas de página + valor de swappiness for > 100. Portanto, uma configuração de 60 fará com que o sistema comece a paginar páginas obsoletas da tabela de páginas de processo quando estiver usando mais de 40% da memória do sistema. Se você quiser permitir que seus programas usem mais memória às custas do cache, você deverá reduzir o valor do swappiness.

    
por 08.02.2010 / 05:23
1

Aconselho que não tente pensar no subsistema da VM no kernel. É extremamente improvável que você tenha informações suficientes para tomar melhores decisões do que o necessário. E se você forçar de alguma forma a fazer a coisa errada, então você vai acabar fazendo as coisas ainda mais lentas.

    
por 08.02.2010 / 15:18
0

O processo ainda está em execução? Abra um terminal e veja se consegue identificar o (s) processo (s) que foram lançados. (ps aux | grep processname 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 o que é o processo, não o mate! Além disso, poste a saída do free -m para que possamos ver se você está realmente usando muito swap.

Se as coisas ainda estiverem lentas, talvez você ainda tenha o que você iniciou em execução. Eu nunca ligaria a troca a menos que você realmente saiba o que está fazendo ou gosta de viver no limite. =)

    
por 08.02.2010 / 05:02
0

Eu acredito que não há nenhuma maneira realmente boa de forçar o Linux a remover os dados do disco para a memória. Quando swapoff / swapon é uma solução de trabalho, mas está suja e facilmente pode tornar seu sistema instável. Para os casos em que você tem mais dados no swap do que na memória livre, será difícil imaginar qualquer política eficiente que o Linux possa empregar para decidir quais pedaços de dados serão movidos para a memória e quais partes manterão no disco.

Resumo: Apenas deixe o Linux restaurar gradualmente seu desempenho da maneira normal. Seu subsistema de VMs é organizado de maneira que se esforça e se move constantemente para um estado equilibrado ideal.

    
por 13.10.2016 / 15:52
-1

Esvaziando o cache de buffers

Se você quiser esvaziá-los, use essa cadeia de comandos.

$ free && sync && echo 3 > /proc/sys/vm/drop_caches && free

             total       used       free     shared    buffers     cached
Mem:       1018916     980832      38084          0      46924     355764
-/+ buffers/cache:     578144     440772
Swap:      2064376        128    2064248
             total       used       free     shared    buffers     cached
Mem:       1018916     685008     333908          0        224     108252
-/+ buffers/cache:     576532     442384
Swap:      2064376        128    2064248

Você pode sinalizar o Kernel do Linux para descartar vários aspectos dos itens armazenados 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). Certifique-se sempre de executar a sincronização primeiro para liberar as coisas úteis para o disco !!!

  • Para liberar pagecache:

    $ echo 1 > /proc/sys/vm/drop_caches
    
  • Para libertar dentaduras e inodes:

    $ echo 2 > /proc/sys/vm/drop_caches
    
  • Para liberar pagecache, dentries e inodes:

    $ echo 3 > /proc/sys/vm/drop_caches
    

Os itens acima devem ser executados como root. Se você está tentando fazê-las usando sudo, então você precisa mudar a sintaxe levemente para algo como:

$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'
$ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'
    
por 15.04.2014 / 16:45