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).

¡Espero que les haya gustado!


Tal vez pueda interesarte


Compartí este artículo