¿Cómo puedo descubrir que los procesos están utilizando el espacio de intercambio?

10

Tengo un servidor Linux que informa sobre 9GB de intercambio utilizado: parte superior

Pero no puedo entender dónde usa el intercambio, algunos resultados de Google dicen que top - Ocommad follow by pmostrará el uso del intercambio por proceso. Pero como se muestra en la imagen de arriba, tomar una breve suma de la columna SWAP muestra que se usan> 10 GB de intercambio, entonces, ¿de dónde viene la cifra de 9 GB para el uso de intercambio?

Top informa que los buffers usan aproximadamente 96492kb de ram. ¿Hay algo que pueda hacer para utilizar esto, en lugar de usar el intercambio?

secmask
fuente
1
top (según la página de manual) calcula que SWAP es VIRTUAL - uso de RAM FÍSICO. No del todo exacto de mis experimentos.
lornix

Respuestas:

6

Es posible que varios programas usen la misma área de intercambio, por lo que se informará dos veces.

No es necesario tratar de decirle a Linux que use el área almacenada en lugar del intercambio; ya es muy inteligente lo que está haciendo. Si está utilizando 9 gb de intercambio y 9 gb de búfer, eso es algo bueno ... eso significa que Linux se da cuenta de que 9 gb de material cargado en la memoria no se usa activamente, por lo que es más eficiente cambiarlo al disco para que su el búfer puede crecer y mejorar su rendimiento.


EDITAR: si agrega toda la memoria utilizada por cada proceso, también obtendrá mucho más que su RAM física. Esto se debe a que las bibliotecas compartidas están siendo utilizadas por múltiples programas, así como a la forma en que Linux maneja los tenedores: no duplica todo el programa en la memoria, solo duplica las porciones que difieren entre las dos instancias. En algunos casos, la memoria de video se puede mostrar como parte de un proceso X; creo que las viejas tarjetas Voodoo3 hicieron esto. Puede haber otros casos donde la memoria "fantasma" también puede aparecer en la parte superior.

Flimzy
fuente
No creo que las bibliotecas compartidas se cuenten como intercambio, porque cuando se inicia el sistema, no se utiliza el intercambio, pero ya hay muchas bibliotecas compartidas cargadas. De todos modos, veo que mi sistema usa aproximadamente 9 GB de partición de intercambio, solo quiero saber qué proceso usó la mayor parte del intercambio (excluir bibliotecas compartidas, archivo de mapa de memoria ...)
secmask
3

El análisis del subdirectorio / proc funciona:

Como un 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

La salida se puede ordenar Hi-Lo canalizando para ordenar:

{blah}| sort -rn

Por supuesto, reescribe esto en tu idioma favorito de la semana como desees. Mi Awk-fu no es fuerte.

(corte y pasta)

#!/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
fuente
1

Manera alternativa:

smem -s swap -r
Kirill Feoktistov
fuente