O que está usando meu swap (Ubuntu)?


30

Eu tenho um servidor Ubuntu 8.04 que está executando um banco de dados e um monte de servidores de aplicativos Java. Sua configuração e uso de memória é:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Notei que a troca ocorre todas as tardes e é liberada em algum momento da noite. A demanda não é a mesma em todos os dias e começa em horários diferentes. Portanto, é bem aleatório, exceto pelo limite nebuloso da "tarde da noite".

A carga nesta máquina varia durante o dia. É muito baixo entre meia-noite e 6 e 7 horas da manhã, muito mais alto (mas estável) até 18h e 20h, depois caindo gradualmente.

Agora eu tenho as seguintes perguntas:

  1. Como posso ver quais processos estão usando swap?
  2. Por que prefere trocar, em vez de tirar alguma memória do cache?

Respostas:


25

Os padrões de uso de troca que você descreve não parecem surpreendentes. Eles são consistentes com alguns processos em execução permanente com páginas raramente usadas. Durante o dia, devido à alta atividade, as páginas raramente usadas estão quase sempre na troca. À noite, há mais espaço para eles na RAM.

Você pode ter uma idéia da quantidade de memória de vários tipos que cada processo está usando em topou htop. Nenhum dos dois mostra o uso de troca por padrão, mas ambos podem ser configurados para (parte superior: pressionar fe ativar a SWAPcoluna; htop: pressionar F2, adicionar a NSWAPcoluna). Você pode obter mais informações sobre um processo específico com cat /proc/12345/vmstatonde 12345está o ID do processo. Observe que “a quantidade de trocas que um programa está usando” não está completamente bem definida, pois algumas páginas são compartilhadas por vários processos.

Existem dois tipos principais de concorrentes para RAM: memória de processo (que pode ser trocada) e caches de disco (que podem ser lidos a partir de um arquivo). Não há razão para sempre priorizar a memória do processo sobre os caches de disco: é melhor trocar uma parte da memória do processo raramente usada do que continuar lendo um arquivo na memória repetidamente. Os números que você fornece, com cerca da metade (digamos, 30% a 70%) da memória dedicada aos caches de disco, são típicos para sistemas que possuem uma quantidade razoável de RAM para as tarefas que devem executar.


6
Não consigo encontrar uma NSWAPcoluna (Ubuntu 16.04: /).
Jjmontes

11
@jjmontes Foi removido . Não sei porque.
Gilles 'SO- stop be evil'

As Perguntas frequentes sobre o htop afirmam que o autor não acredita que seja possível relatar com precisão o uso de swap e que a métrica da parte superior é imprecisa.
Oliver Evans

0

No StackOverflow, já existe uma excelente resposta para sua primeira pergunta ("Qual processo está realmente usando swap?").

https://stackoverflow.com/a/7180078/1442301

Em poucas palavras, ferramentas como topou htopnão fornecem informações precisas sobre o uso de swap. Você deve mergulhar na /procpasta (no pseudo arquivo /proc/$PID/smaps) para obter informações mais precisas.

A postagem mencionada acima contém um pequeno script de shell para que essas informações ecoem de uma maneira agradável.



0

Sem pesquisar e analisar as saídas de ferramentas como vmstat, freee top, o melhor lugar para procurar pode ser a verificação do usuário root ou de outros usuários no sistema. Se a carga geral no sistema atingir um nível confiável em um determinado momento, é provável que exista um processo no cron que crie a necessidade de recursos. Caso contrário, você sempre pode criar um utilitário de registro descartável do gueto com o scriptutilitário, que apenas registra tudo o que vai para o STDOUT.

Portanto, se eu precisasse executar um script descartável único para capturar a saída para inspeção posterior, em um terminal digitaria:

script /tmp/free.txt

e depois

while (true); do date; free; sleep 30; done

e em outro terminal

script /tmp/top.txt

e depois

while (true); do date; top -n 1; sleep 30; done

e então na manhã seguinte, mate as duas scriptinvocações e combine a saída de topefree

mais uma vez, esta é uma abordagem do gueto, mas parece que você só precisa de uma única

você também pode gostar de ler o guia de troca do ubuntu

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.