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:
- Como posso ver quais processos estão usando swap?
- Por que prefere trocar, em vez de tirar alguma memória do cache?
NSWAP
coluna (Ubuntu 16.04: /).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
top
ouhtop
não fornecem informações precisas sobre o uso de swap. Você deve mergulhar na/proc
pasta (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.
fonte
Com
htop v1.01
, eu pressionei "S" para adicionarNSWAP
coluna em vez de "F2" (como Gilles sugeriu), em seguida,Columns
>Available Columns
> eF5
adicioná-lo.fonte
Sem pesquisar e analisar as saídas de ferramentas como
vmstat
,free
etop
, 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 oscript
utilitá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:
e depois
e em outro terminal
e depois
e então na manhã seguinte, mate as duas
script
invocações e combine a saída detop
efree
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
fonte