Como descubro quando o espaço de troca será usado em nossa máquina Linux?

0

Estamos tentando ajustar nossos servidores de aplicativos, que são máquinas Amazon Linux ...

[myuser@mymachine ~]$ uname -a
Linux mymachine.myco.org 4.3.17-14.25.amzn1.x86_64 #1 SMP Wed May 10 01:58:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Temos apenas um processo do JBoss em execução em nossa máquina (ou seja, do processo que iniciamos). A máquina tem 30 GB de memória e o processo do Jboss aloca 25 GB (usando a opção Java "-Xmx25600m"). Quando a máquina começará a usar o espaço de troca? Quando eu executo "free -m", não vejo nenhum espaço de troca usado, que é o que eu espero ...

[myuser@mymachine ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:         30103       7238      22864          0        172       4438
-/+ buffers/cache:       2627      27475
Swap:            0          0          0

Eu pensei que a troca só seria usada se começássemos a ficar sem memória, mas me disseram que isso não é necessariamente verdade. Quando a máquina começará a usar o espaço de troca?

    
por Dave 01.09.2017 / 18:34

3 respostas

1

O Linux geralmente tenta manter as coisas em memória RAM, qualquer um só começa a trocar quando você fica sem memória RAM disponível (que é o total de RAM usado por aplicativos, buffers e arquivos em cache). Quando iniciar a troca é configurável, no entanto, isso pode variar dependendo da configuração e é controlado pelo valor swappiness . Para ver qual é o valor atual de swappiness definido para ser executado

cat /proc/sys/vm/swappiness

A maioria dos sistemas padrão tem valor de cerca de 60. Quanto menor o valor, mais agressivo o kernel irá trabalhar para manter as coisas dentro do RAM e configurá-lo para 0 desabilitar a troca inteiramente (swap será usado para hibernação mas não usado ativamente durante a execução).

O Swappiness só afeta quando o RAM do seu sistema está quase completamente cheio de aplicativos e buffers e caches combinados. Ele muda o que o kernel favorece quando um aplicativo solicita mais memória RAM, jogando fora os dados do cache ou gravando alguma memória menos usada no disco. O valor do swappiness controla a proporção entre estes, onde 1 basicamente sempre joga fora o cache e 100 fará com que os dados do aplicativo sejam trocados na maior parte do tempo.

Você pode configurar o swappiness de um sistema rapidamente com

sysctl vm.swappiness=10

E defina-o permanentemente, editando /etc/sysctl.conf para incluir

vm.swappiness = 10

Para a sua situação em que você tem um servidor com uma boa quantidade de RAM e JVM usando a maioria, você provavelmente não desejará estar trocando muito se isso reduzir o valor para 10 ou até mesmo 1 para ser benéfico. Reduzi-lo para 10 é bastante benéfico na maioria dos sistemas modernos com muitos ram.

    
por 01.09.2017 / 19:30
1

De uma perspectiva prática, devido ao modo como o Java lida com a memória, isso reduz para:

"Meu servidor tem 5 GB de RAM, quando será iniciado a troca?"

Isso se torna uma questão de saber se você está ou não usando tmpfs para armazenar arquivos temporários, pois esse é o outro aspecto do sistema que potencialmente utilizará espaço de troca (tmpfs habita o cache de páginas regular até que o sistema precise de mais memória, então é empurrado para trocar espaço). É muito provável que seu aplicativo não use isso, e nesse caso você pode supor que provavelmente não precisará de espaço de troca durante operações normais (e se você encerrar seu aplicativo principal ao executar manutenção, você pode não precisar de espaço de troca em tudo).

Dito isto, você pode querer considerar alguns apenas no caso. Em particular, uma vez que você provavelmente preferiria economizar algum dinheiro (presumo que, como você está executando o Amazon Linux no EC2 e, portanto, o espaço em disco custa dinheiro por unidade de tempo), sugiro usar a memória compactada para Troque o espaço usando o driver zram (não tenho 100% de certeza se o Amazon Linux inclui esse driver, mas ficaria surpreso se eles não o tivessem pelo menos como um módulo).

    
por 01.09.2017 / 19:17
0

A partição swap também é usada para hibernação (ou seja, suspensão para disco). E você poderia trocar em alguns arquivos (preencha um novo arquivo de swap com zero usando dd , faça um swap usando mkswap , use como swap usando swapon ....).

Claro, se a sua máquina executa muito programa usando memória, e se algum processo estiver inativo, ele pode ser trocado e isso também usaria swap.

    
por 01.09.2017 / 18:37