O swap usado não é ruim, mas muita atividade de troca é
vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
6 0 521040 114564 6688 377308 8 13 639 173 0 1100 5 4 90 0
1 0 521040 114964 6688 377448 0 0 256 0 0 1826 3 4 94 0
0 0 521040 115956 6688 377448 0 0 0 0 0 1182 7 3 90 0
0 0 521036 115992 6688 377448 4 0 16 0 0 1154 10 2 88 0
3 0 521036 114628 6696 377640 0 0 928 224 0 1503 15 17 67 1
A coluna swapd não é problema.
Valores diferentes de zero nas colunas si e so são fatais para o desempenho do servidor. Especialmente aqueles com muita RAM.
É melhor desativar a permutação em máquinas com vários GB de RAM:
sysctl -w vm.swappiness=0
Isso não desabilitará a troca. Ele apenas instruirá o Linux a usar o swap como última medida de recurso. Isso desperdiçará alguns MB de programas que não precisam estar na RAM ... Mas é preferível trocar o inchaço das filas de acesso ao disco.
Editar 1: porque o valor padrão de swappiness não é o ideal
Nós temos que lembrar há duas décadas que um grande 486 tinha apenas 32Mb de RAM. Os algoritmos de troca foram desenvolvidos quando toda a RAM pôde ser movida para o disco em uma pequena fração de segundo. Mesmo com os discos mais lentos da época. É por isso que as políticas de troca padrão são tão agressivas. RAM era o gargalo naqueles dias. Desde então, o tamanho da RAM aumentou mais de 10.000 vezes e a velocidade do disco foi menor que 10 vezes. Isso mudou o gargalo para a largura de banda do disco.
Editar 2: por que razão a atividade é mortal para os servidores?
Si e so a atividade em máquinas com toneladas de RAM é fatal porque significa que o sistema está lutando consigo mesmo pela RAM. O que acontece é que os discos, mesmo os grandes armazenamentos, são muito lentos quando comparados aos RAMs. A troca agressiva favorece o cache de disco do kernel sobre os dados do aplicativo e é a fonte mais comum de brigas pela RAM. Como o sistema operacional terá que liberar o cache de disco em cada si , o tempo de vida do cache extra que o swap oferece é muito baixo para ser útil de qualquer maneira. O resultado é que você está usando a largura de banda do disco para armazenar o cache que provavelmente não será usado e pausando seus programas que estão aguardando as páginas si . Significa que consome muitos recursos críticos com pouco ou nenhum benefício para os aplicativos.
Anote o título da resposta "muita atividade de troca em servidores com muita RAM". Isso não se aplica a máquinas com atividade ocasional de si e so. Isso pode não se aplicar no futuro se algoritmos de swap mais inteligentes forem desenvolvidos nos SOs.
Editar 3: páginas "frias"
As pessoas romantizam o algoritmo de troca. Alguns dizem que "são necessárias páginas menos usadas da RAM", mas isso não é o que o kernel faz. A coisa é difícil de entender sobre swap é o kernel não sabe o que é uma "página fria". O kernel não possui uma boa métrica para determinar se a página é usada ou provável de ser usada no futuro próximo. Para contornar que o kernel coloca páginas no swap mais ou menos aleatoriamente e as páginas que não são necessárias ficam lá. O problema desse algoritmo é que as páginas precisam ir para o swap para saber se elas são necessárias pelos aplicativos. E isso significa que muitas páginas "quentes" irão para o swap. O problema é que os discos são muito lentos em comparação com a RAM. A conseqüência disso é quando a troca inicia todos os aplicativos recebem pausas aleatórias aguardando os discos e isso atrasa a latência e a taxa de transferência.
Eu construí meu próprio benchmark que é um cenário realista muito comum a muitas aplicações com um volume decente. Dos meus testes, não vi nenhum benefício em taxa de transferência ou latência quando os swaps estão em uso. Longe disso. Quando a troca inicia, ela diminui a taxa de transferência e a latência em pelo menos uma ordem de magnitude.
Eu vou um pouco mais sobre isso: eu entendo swap não é para processamento. Swaps são apenas para emergências. Aqueles momentos em que muitos aplicativos estão sendo executados ao mesmo tempo e você recebe um pico de memória. Sem swap isso causaria erros de falta de memória. Eu considero o uso de swap uma falha das equipes de desenvolvimento e produção. Esta é apenas uma opinião que vai muito além do que discutimos aqui, mas é o que eu penso. É claro que meus aplicativos têm excelente gerenciamento de memória sozinhos.