¿Qué está usando mi intercambio (Ubuntu)?

30

Tengo un servidor Ubuntu 8.04 que ejecuta una base de datos y un montón de servidores de aplicaciones Java. Su configuración y uso de memoria es:

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

Noté que el intercambio aumenta todas las tardes y se libera en algún momento de la noche. La demanda no es la misma en todos los días y comienza en diferentes momentos. Entonces es bastante aleatorio, excepto por el límite difuso de "tarde-noche".

La carga en esta máquina varía durante el día. Es muy bajo entre la medianoche y las 6-7 de la mañana, mucho más alto (pero estable) hasta las 6-8 de la tarde, y luego cae gradualmente.

Ahora tengo las siguientes preguntas:

  1. ¿Cómo puedo ver qué procesos están usando el intercambio?
  2. ¿Por qué prefiere cambiar en lugar de tomar algo de memoria del caché?
Konrad Garus
fuente

Respuestas:

25

Los patrones de uso de intercambio que describe no suenan sorprendentes. Son consistentes con algunos procesos que se ejecutan permanentemente y que tienen páginas poco utilizadas. Durante el día, debido a la gran actividad, las páginas raramente utilizadas están casi siempre en el intercambio. Por la noche, hay más espacio para ellos en la RAM.

Puede echar un vistazo a la cantidad de memoria de diversos tipos que utiliza cada proceso en topo htop. Ninguno de los dos muestra el uso de intercambio de forma predeterminada, pero ambos se pueden configurar para (arriba: presione fy encienda la SWAPcolumna; htop: presione F2, agregue la NSWAPcolumna). Puede obtener más información sobre un proceso en particular con cat /proc/12345/vmstatdónde 12345está la ID del proceso. Tenga en cuenta que "cuánto intercambio está utilizando un programa" no está completamente bien definido, ya que algunas páginas son compartidas por varios procesos.

Hay dos tipos principales de competidores para la RAM: memoria de proceso (que se puede intercambiar) y cachés de disco (que se pueden volver a leer desde un archivo). No hay ninguna razón para priorizar siempre la memoria de proceso sobre las memorias caché de disco: es mejor intercambiar una porción de memoria de proceso raramente utilizada que seguir leyendo un archivo en la memoria una y otra vez. Las cifras que da, con aproximadamente la mitad (digamos 30% –70%) de la memoria dedicada a las memorias caché de disco, es típica para los sistemas que tienen una cantidad razonable de RAM para las tareas que se supone que deben hacer.

Gilles 'SO- deja de ser malvado'
fuente
66
No puedo encontrar una NSWAPcolumna (Ubuntu 16.04: /).
jjmontes
1
@jjmontes Se ha eliminado . No se porque.
Gilles 'SO- deja de ser malvado'
Las preguntas frecuentes de htop indican que el autor no cree que sea posible informar con precisión el uso del intercambio, y que la métrica de top no es precisa.
Oliver Evans
0

En StackOverflow, ya hay una excelente respuesta a su primera pregunta ("¿Qué proceso está usando realmente el intercambio?").

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

En pocas palabras, a las herramientas les gusta topo htopno proporcionan información precisa sobre el uso del intercambio. Debe sumergirse en la /proccarpeta (en el pseudo archivo /proc/$PID/smaps) para obtener información más precisa.

La publicación mencionada anteriormente contiene un breve script de shell para que esta información se repita de una manera agradable.

Javier
fuente
0

Con htop v1.01, presioné "S" para añadir NSWAPla columna en lugar de "F2" (como se sugiere Gilles), a continuación, Columns> Available Columns> y F5para añadirlo.

ingrese la descripción de la imagen aquí

Genjo
fuente
Tengo htop 2.0.1 y no veo la opción NSWAP :(
Adam
1
@Adam El mantenedor ya no quiere mostrar esta columna debido a que no hay una forma confiable de obtener esta información; ver ¿Por qué htop no presenta una columna SWAP, como top?
Genjo
0

Sin sondear y analizar los resultados de herramientas como vmstat, freey top, el mejor lugar para buscar podría ser crontabs del usuario raíz u otros usuarios en el sistema. Si la carga general en el sistema aumenta de manera confiable en un momento determinado, es probable que haya un proceso en cron que cree la necesidad de recursos. De lo contrario, siempre puede crear una utilidad de registro de ghetto desechable con la scriptutilidad, que solo registra todo lo que va al STDOUT.

Entonces, si necesito hacer un script desechable para capturar la salida para una inspección posterior, en una terminal escribiría:

script /tmp/free.txt

y entonces

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

y en otra terminal

script /tmp/top.txt

y entonces

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

y luego a la mañana siguiente, elimine ambas scriptinvocaciones y haga coincidir la salida de topyfree

una vez más, este es un enfoque de gueto, pero parece que solo necesitas un único

también te gustaría leer la guía de intercambio de ubuntu

Brad Clawsie
fuente