Existe alguma maneira de forçar o Linux a se desfazer quando há baixo uso de CPU?

1

Depois de trabalhar por mais de um dia na minha máquina, o swap se torna cerca de 1 GB. Alguns dos plugins do meu painel são trocados para que fiquem atrasados. Além disso, o sistema não desativa até que eu faça isso swapoff -all;swapon --all . Existem mecanismos no kernel do Linux para remover quando a carga está baixa ou algo assim?

Às vezes, a quantidade de RAM usada é de 90%, portanto, escrever um script que faça swapoff -all;swapon --all a cada hora é uma má ideia.

    
por yanpas 20.07.2015 / 22:47

2 respostas

1

Quando o Linux precisa encontrar RAM para armazenar algo, ele procura as páginas na RAM que não foram usadas há muito tempo. Se essas páginas pertencerem aos arquivos, elas serão liberadas. Se essas páginas forem memória de processo, elas serão movidas para swap.

O Linux não sabe quais páginas serão usadas em breve e não sabe quais páginas serão necessárias rapidamente (por exemplo, para que os programas interativos sejam reativos). Eu não acho que haja alguma maneira de dar prioridade a um processo específico para ficar na RAM. As páginas podem ser bloqueadas para a RAM (isso requer raiz ou a capacidade apropriada), mas não é recomendável bloquear o material para a RAM, pois isso reduz o espaço para o restante.

Você pode forçar um processo específico a ser carregado na RAM por lendo sua memória - veja meu unswap script .

Você pode reduzir a propensão a trocar configurando a vm.swappiness parâmetro sysctl. No entanto, tenha em atenção que a redução da permuta não é, de modo algum, garantida para tornar o seu sistema mais ágil. Não há milagre: se o seu sistema trocar menos, ele gastará mais tempo carregando dados de arquivos (como código de programa).

Se você tem uma quantidade relativamente grande de memória, uma configuração que eu não encontrei bem ajustada por padrão em 3.0-3.16 + kernels é outra vm parâmetro sysctl : vm.vfs_cache_pressure . Este parâmetro é um pouco semelhante ao swappiness, mas diz respeito aos objetos do kernel, especialmente o cache inode e dentry. Aumentar o valor reduz efetivamente a quantidade de memória dedicada a esse cache. Você pode ver quanta memória é usada pelo cache inode e dentry com slabtop ou com

</proc/slabinfo awk '{print $1, $3*$4}' |sort -k2n | tail

Se você achar que o seu sistema está lento na parte da manhã, isso pode ocorrer porque tarefas cron diárias, como updatedb , encheram a memória com entradas de cache de inode. Tente algo como sysctl vm.swappiness=500 . Você pode fazer uma limpeza única do cache com echo 2 >|/proc/sys/vm/drop_caches (não faça isso regularmente, pois isso pode matar o desempenho).

    
por 22.07.2015 / 03:49
3

Provavelmente, você tem o valor de swappiness padrão de 60. Reduza para 10, a fim de reduzir a preferência de permuta pela memória e, em seguida, monitorar o comportamento depois disso.

echo 10 > /proc/sys/vm/swappiness

Para tornar permanente (ou seja, sobreviver a uma reinicialização), edite /etc/sysctl.conf e adicione essa linha

vm.swappiness = 10

Mais informações sobre esse parâmetro podem ser encontradas em Wikipedia: Swappiness .

    
por 21.07.2015 / 00:19

Tags