Como posso descobrir que os processos estão usando espaço de troca?

10

Eu tenho um servidor linux que reporta mais de 9 GB de swap usado: topo

Mas não consigo descobrir onde ele usa swap, alguns resultados do google disseram que top - Ocommad follow by pmostrará o uso de swap por processo. Mas, como mostrado na imagem acima, fazer uma breve soma da coluna SWAP mostra que> 10 GB de swap são usados; portanto, de onde vem o valor de 9 GB para uso de swap?

Os principais relatórios relatam que cerca de 96492kb de memória RAM é usado por buffers. Existe algo que eu possa fazer para utilizar isso, em vez de usar swap?

secmask
fonte
11
top (de acordo com a página de manual) calcula o SWAP para uso de RAM VIRTUAL-FÍSICO. Não é totalmente preciso de minhas experiências.
Lornix

Respostas:

6

É possível que vários programas estejam usando a mesma área de troca, por isso será relatado duas vezes.

Não é necessário tentar dizer ao Linux para usar a área de buffer em vez do swap - já é muito inteligente sobre o que está fazendo. Se você estiver usando 9 gb de swap e 9 gb de buffer, isso é uma coisa boa ... isso significa que o Linux percebe que 9 gb de material carregado na memória não está sendo usado ativamente, por isso é mais eficiente trocá-lo para o disco para que seu o buffer pode aumentar e melhorar seu desempenho.


EDIT: Se você adicionar toda a memória usada por cada processo, também terá muito mais do que sua RAM física. Isso ocorre porque as bibliotecas compartilhadas são usadas por vários programas, bem como a maneira como o Linux lida com os garfos - ele não duplica o programa inteiro na memória, apenas duplica as partes que diferem entre as duas instâncias. Em alguns casos, a memória de vídeo pode ser mostrada como parte de um processo X - acho que as antigas placas Voodoo3 fizeram isso. Pode haver outros casos em que a memória "fantasma" também pode aparecer na parte superior.

Flimzy
fonte
Eu não acho que as bibliotecas compartilhadas devam ser contadas como swap, porque quando a inicialização do sistema, nenhuma troca é usada, mas há muitas bibliotecas compartilhadas já carregadas. De qualquer forma, vejo que o meu uso do sistema sobre 9GB de partição swap, eu só quero saber qual processo utilizado mais de swap (excluir compartilhar bibliotecas, arquivos mapa de memória ...)
secmask
3

A análise do subdiretório / proc funciona:

Como um script bash:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

A saída pode ser classificada como Hi-Lo por meio de tubulação para classificar:

{blah}| sort -rn

Obviamente, reescreva isso no seu idioma favorito da semana, conforme desejar. Meu Awk-fu não é forte.

(cut-n-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr
lornix
fonte
1

Caminho alternativo:

smem -s swap -r
Kirill Feoktistov
fonte