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:
- ¿Cómo puedo ver qué procesos están usando el intercambio?
- ¿Por qué prefiere cambiar en lugar de tomar algo de memoria del caché?

NSWAPcolumna (Ubuntu 16.04: /).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
topohtopno 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.
fuente
Con
htop v1.01, presioné "S" para añadirNSWAPla columna en lugar de "F2" (como se sugiere Gilles), a continuación,Columns>Available Columns> yF5para añadirlo.fuente
Sin sondear y analizar los resultados de herramientas como
vmstat,freeytop, 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 lascriptutilidad, 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:
y entonces
y en otra terminal
y entonces
y luego a la mañana siguiente, elimine ambas
scriptinvocaciones y haga coincidir la salida detopyfreeuna 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
fuente