O Swap deve ser usado assim?

1

Eu tenho um servidor com Dual Nehalem Quad Core Xeon 5520 e 12GB de RAM DDR3. O uso médio de memória do servidor é de apenas 10-15%, mas o Swap usado mostra 10% +. Isso é normal, ou pode haver algo errado que esteja causando isso? Fiquei com a impressão de que o Swap só era usado se não houvesse memória suficiente disponível.

Estou executando o Apache / 2.0.63 no CentOS 5.3.

    
por James Simpson 10.06.2009 / 07:39

4 respostas

5

Não há nada de errado com isso. O kernel irá acessar a memória virtual gradualmente ao longo do tempo. Isso também pode ocorrer se o seu servidor tiver "picos" de atividade e a memória que você está liberando no momento for rapidamente preenchida. A pressão no sistema de memória faz com que as saídas de página ocorram até que a pressão seja reduzida a um ponto definido (que você pode examinar em / proc / sys / vm). Mesmo em um sistema bastante ocioso, vi page-outs graduais ao longo do tempo. Então, a menos que a troca esteja razoavelmente ativa (muitas falhas de página resultando em atividade de paginação) eu não me preocuparia com isso.

Se você realmente se preocupa, pode sempre desativar a troca e, em seguida, ativá-la. Isso irá forçar as páginas trocadas de volta na memória. Eu não recomendo fazer isso, mas você pode, se quiser. Apenas certifique-se de ter memória livre suficiente antes de fazer isso.

    
por 10.06.2009 / 07:43
3

Você não deve se preocupar com isso - o swap será usado se o kernel considerar que os dados não serão acessados o suficiente para garantir que ele esteja na memória física.

Se você gostaria de monitorar o uso de swap "ruim", é melhor monitorar a taxa na qual as leituras e gravações de swap estão ocorrendo, não simplesmente se ele está sendo usado ou não .

Por exemplo ...

# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0  19528  45324  19348 240132   50   17    93    26   30   30  0  1 98  1
 0  0  19528  45324  19348 240156    0    0     0     3    9   23  0  0 100  0
 0  0  19528  45324  19352 240156    0    0     0     9    9   25  0  0 100  0
 0  0  19528  45324  19352 240156    0    0     0     0    5   17  0  0 100  0

O primeiro relatório diz a você quais são os estados (em média) desde que a máquina foi trazida pela primeira vez, o resto você deve (no caso acima) médias de 3 segundos.

Observe que os campos si e so são em sua maioria zero - é disso que você está interessado.

    
por 10.06.2009 / 09:12
1

Tudo bem, como já apontamos, picos de uso podem causar isso ou o kernel pode decidir que alguns itens são colocados em swap porque é mais inteligente usar a RAM para outra coisa (cache de páginas).

Como responde a outras perguntas apontou sysctl vm.swappiness pode ser de interesse para você evitar isso.

    
por 10.06.2009 / 08:17
1

(postado como resposta, pois demorou muito para ser adicionado como um comentário adicional à resposta de Avery Payne)

Além disso, se swap tiver sido usado durante um período de pico que já passou, você pode descobrir que a maioria dos dados em swap também está atualmente na RAM. Se o Linux ler páginas de swap para a RAM, ele não desalocará imediatamente o espaço de troca, a menos que precise dele para obter mais dados, dessa forma, se precisar trocar as páginas de volta (e saber que os dados nelas não foram alterados) ) realmente não precisa gravar as páginas no disco como elas já estão lá.

Veja / proc / meminfo para detalhes. Em um pequeno servidor meu atualmente:

olm:/proc# free -m
             total       used       free     shared    buffers     cached
Mem:          1487       1457         30          0         15       1094
-/+ buffers/cache:        347       1139
Swap:          980        112        868
olm:/proc# cat meminfo
MemTotal:      1523572 kB
MemFree:         30688 kB
Buffers:         15724 kB
Cached:        1120884 kB
SwapCached:      67868 kB
SwapTotal:     1004052 kB
SwapFree:       888928 kB

Então, aqui ~ 66Mb do espaço de troca de 112Mb alocado também está atualmente presente na RAM. Não faz sentido remover 66Mb do swap, já que não há demanda para o espaço para outros usos (há bastante espaço de troca livre). Se a troca ficar cheia, estas páginas serão realocadas, se as páginas mudarem na RAM, elas serão marcadas como sujas e livres para serem realocadas, mas se precisarem ser trocadas de volta, o kernel pode salvar um monte de gravações em disco. p>

Se eu forçar os caches e buffers de disco a serem limpos com

sync; echo 3 > /proc/sys/vm/drop_caches

o resultado permanece o mesmo:

olm:/proc# free -m
             total       used       free     shared    buffers     cached
Mem:          1487       1278        209          0          0        979
-/+ buffers/cache:        298       1189
Swap:          980        112        868
olm:/proc# cat meminfo
MemTotal:      1523572 kB
MemFree:        212320 kB
Buffers:           652 kB
Cached:        1005732 kB
SwapCached:      67868 kB
SwapTotal:     1004052 kB
SwapFree:       888928 kB

A leitura "armazenada em cache" permaneceu alta depois de solicitar que os caches de disco fossem limpos, já que isso também conta a memória alocada para VMs do VMWare devido à maneira como ela é alocada. A leitura do SwapCached não foi alterada, pois não há sentido em copiar as páginas de volta na RAM só porque a RAM agora está livre - elas podem nunca ser necessárias antes que a RAM seja alocada para outra coisa novamente, então essas leituras seriam desperdiçadas.

A situação acima é ligeiramente diferente da sua, já que esta máquina quase sempre tem toda sua memória RAM alocada para algo (VMs, outros processos, cache de E / S + buffers), mas dependendo do histórico de carga da sua máquina desde a última inicialização. Não é improvável que uma parte das páginas no espaço alocado em sua área de troca esteja similarmente também na RAM.

    
por 10.06.2009 / 12:54