Mientras estaba haciendo un tunning de performance de un servidor MySQL, tuve la necesidad de determinar qué procesos estaban utilizando mayor cantidad de espacio en el área de intercambio en memoria secundaria (más conocida como swap). Para ello recurrí al viejo y querido top
.
Veamos directamente un ejemplo. En el siguiente sistema GNU/Linux, se observa que se están utilizando actualmente 109 MB de memoria swap.
[root@centos ~]# free -m total used free shared buffers cached Mem: 2886 2796 90 0 44 131 -/+ buffers/cache: 2621 265 Swap: 1535 109 1426
La salida de vmstat
reporta que no se están moviendo páginas desde y hacia swap actualmente. Notar que si
(swap in/sec.) y so
(swap in/sec.) son igual a cero:
[root@centos ~]# vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 112340 91900 45392 134232 0 0 22 59 1 45 4 0 95 0 0
Sin embargo, me interesa conocer qué procesos están utilizando esos 109 MB de swap, para tomar medidas en caso de que sea necesario. Para ello, es posible utilizar la herramienta top
. Recuerden que el comando top
permite ordenar los procesos por diferentes columnas, no sólo por consumo de CPU.
Cómo ordenar el listado de procesos por consumo de swap
Por defecto, cuando iniciamos top
, éste muestra un listado de procesos ordenado por consumo de CPU, de mayor a menor. De esta forma podemos determinar rápidamente qué procesos consumen mayor cantidad de CPU en tiempo real. De allí su nombre top.
Por ejemplo, en un sistema Debian:
top
posee muchos comandos interactivos para realizar diferentes tareas. Como por ejemplo refrescar (presionando "enter" o "espacio"), obtener ayuda ('?' o 'h'), cambiar el intervalo de refresco ('d'), filtrar por usuario ('u'), matar un proceso ('k'), cambiar la prioridad de un proceso ('r'), mostrar/ocultar columnas ('l' , 'm', 't', '1'), ordenar ('F' u 'O'), etc.
Para mayor información, dirigirse a la sección "3. INTERACTIVE Commands" de la página de manual:
man top
3. INTERACTIVE Commands Listed below is a brief index of commands within categories. Some commands appear more than once -- their meaning or scope may vary depending on the context in which they are issued. 3a. GLOBAL_Commands <Ret/Sp> ?, =, A, B, d, G, h, I, k, q, r, s, W, Z 3b. SUMMARY_Area_Commands l, m, t, 1 3c. TASK_Area_Commands Appearance: b, x, y, z Content: c, f, H, o, S, u Size: #, i, n Sorting: <, >, F, O, R 3d. COLOR_Mapping <Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7 4b. COMMANDS_for_Windows -, _, =, +, A, a, G, g, w
Es importante destacar que estos comandos interactivos son sensibles a mayúsculas. No es lo mismo indicar 'f' (selección de columnas) que 'F' (ordenamiento). Para indicar el comando 'f', el cual selecciona columnas a mostrar, simplemente se debe presionar la tecla F
. Mientras que para indicar el comando 'F', el cual se utiliza para modificar el ordenamiento, se debe presionar Shift+F
, o F
habiendo habilitado el bloqueo de mayúsculas antes, utilizando la tecla Caps Lock
.
Entonces, para determinar qué procesos están utilizando más espacio en la memoria de intercambio, será necesario ordenar por la columna "SWAP". Indicar el comando 'F' u 'O' para modificar el ordenamiento:
El asterisco indica por qué columna se está ordenando la lista de procesos actualmente. Presionar la tecla 'P' para ordenar por "SWAP":
Luego presionar "enter":
La lista de procesos ha quedado ordenada por consumo de memoria swap, de mayor a menor. Para invertir el orden, enviar el comando 'R' (tecla 'R' mayúscula).
Fuente: linuxito