Liberta o espaço de troca de uma só vez após o evento de troca

3

Eu uso minha caixa Linux para muito trabalho computacional e, às vezes, uma computação em particular consome muita memória RAM. Quando termino, acabo com um monte de swap usado e um monte de memória livre, e se eu for para o meu negócio como de costume, todos os outros processos na máquina ficarão um pouco atrasados até que eles sejam trocados novamente. Parece que seria legal se houvesse um comando para rapidamente voltar tudo para a RAM para que eu pudesse, digamos, rodar e depois levantar e ir usar o banheiro ou algo assim e quando eu voltar tudo seria rápido novamente .

Eu encontrei pergunta que sugere que você pode fazer isso (pelo menos no Linux) com

sudo swapoff -a
sudo swapon -a

Mas quando eu tento isso, é preciso para sempre - é apenas liberar swap a uma taxa de 2-5 MB / s, que é caminho menor do que deveria capaz de, e dificilmente parece valer a pena. Isso é normal? Existe uma maneira de acelerar esse processo para que ele seja executado no horário "indo ao banheiro" em vez de "sair para almoçar"?

    
por arcticmac 31.03.2015 / 22:06

2 respostas

2

Recentemente, tive o mesmo problema e criei isso para limpar a troca rapidamente:

#Single-proc function to core-dump swapped ranges > 1M to /dev/null
unswap(){ (awk -F'[ \t-]+' '/^[a-f0-9]*-[a-f0-9]* /{recent="0x"$1" 0x"$2}/Swap:/&&$2>1000{print recent}' /proc/$1/smaps | while read astart aend; do gdb --batch --pid $1 -ex "dump memory /dev/null $astart $aend" &>/dev/null; done&)2>/dev/null;};

#Loop to run unswap on the top 20 swap-consuming processes
grep VmSwap /proc/*/status 2>/dev/null | sort -nk2 | tail -n20 | cut -d/ -f3 | while read line; do unswap $line; done;

#Observe the number of core dumps currently running, along with free swap, over time. 
echo "Dumps Free(m)"; rcount=10; while [[ $rcount -gt 0 ]]; do rcount=$(ps fauxww | grep "dump memory" | grep -v grep | wc -l); echo "$rcount        $(free -m | awk '/Swap/{print $4}')"; sleep 1; done 

Se isso não funcionar em seu ambiente específico, o processo é o seguinte:

1. Obtenha uma lista dos processos que consomem mais troca.

No meu caso, estou verificando / proc / $ pid / status, com o uso de troca na linha VmSwap.

# grep VmSwap /proc/*/status 2>/dev/null | sort -nk2 | tail -n5
/proc/22457/status:VmSwap:      3780 kB
/proc/22684/status:VmSwap:      4260 kB
/proc/7408/status:VmSwap:       4396 kB
/proc/31992/status:VmSwap:      9176 kB
/proc/2967/status:VmSwap:      60840 kB

2. Para os procs de alta troca, eu acho os intervalos de endereços de memória que estão contribuindo com o maior uso de troca.

Eu recebo isso de / proc / $ pid / smaps:

7f2fd1bc4000-7f2fd1d24000 rw-p 00000000 00:00 0 <<< Address range
Size:               1408 kB
Rss:                 900 kB
Pss:                 900 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       900 kB
Referenced:            4 kB
Anonymous:           900 kB
AnonHugePages:         0 kB
Swap:                508 kB    << Swap used
KernelPageSize:        4 kB
MMUPageSize:           4 kB

3. Eu uso o gdb para fazer core dumps desses intervalos de endereços diretamente para / dev / null

Isso força o sistema a acessar essa memória e a retirar da troca. Ir para / dev / null evita IO desnecessário.

gdb --batch --pid $pid -ex "dump memory /dev/null $astart $aend"

O processo que eu mencionei originalmente omite qualquer região de memória usando menos de 1M de swap para obter a maioria do swap com consideravelmente menos core dumps, mas isso não é obrigatório.

    
por 13.01.2016 / 07:00
0

Os comandos listados são uma maneira conveniente de forçar o kernel a mover todas as páginas necessárias para a RAM e reativar a troca. A razão pela qual é tão lenta é desconcertante - a menos que você tenha arquivos de troca (em vez de partições) que são extremamente fragmentados, ou você está tentando fazer isso enquanto faz outras E / S.

Você pode querer ajustar o valor swappiness ( /proc/sys/vm/ ). Um valor baixo significa que é menos provável que o sistema pagine para o disco.

Você também pode querer ativar zswap , o que faz com que as páginas sejam compactadas, usando menos espaço de troca. Ele usa um pouco de CPU, é claro, mas isso é muito menos impacto do que ter que entrar.

    
por 01.04.2015 / 03:10

Tags