4.6. Información específica de Red Hat Enterprise Linux

Debido a la complejidad inherente de un sistema operativo con memoria virtual en demanda, la supervisión de los recursos relacionados con la memoria bajo Red Hat Enterprise Linux, pueden ser un poco confusos. Por lo tanto, lo mejor es comenzar con las herramientas más directas y partir de allí.

Usando free es posible obtener una vista general concisa (quizás hasta un poco simplistica) de la utilización de la memoria principal y de intercambio. He aquí un ejemplo:

             total       used       free     shared    buffers     cached
Mem:       1288720     361448     927272          0      27844     187632
-/+ buffers/cache:     145972    1142748
Swap:       522104          0     522104
      

Podemos ver que este sistema tiene 1.2GB de RAM, de los que solamente 350MB estan realmente en uso. Como se puede esperar para un sistema con esta cantidad de RAM disponible, no se utiliza nada de los 500MB de memoria de intercambio.

Compare ese ejemplo con el que sigue:

             total       used       free     shared    buffers     cached
Mem:        255088     246604       8484          0       6492     111320
-/+ buffers/cache:     128792     126296
Swap:       530136     111308     418828
      

Este sistema tiena alrededor de 256MB de RAM, la mayoría de la cual está en uso, dejando solamente 8MB libres. Más de 100MB de los 512MB de swap estan en uso. Aún cuando el sistema está ciertamente más limitado en términos de memoria que el primer sistema, para determinar si esta limitación de memoria está causando problemas de rendimiento, tenemos que investigar un poco más.

vmstat, aún cuando es más críptico que free, tiene el beneficio de que muestra más que simplemente las estadísticas de utilización de memoria. He aquí la salida de vmstat 1 10:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0 111304   9728   7036 107204   0   0     6    10  120    24  10   2  89
 2  0  0 111304   9728   7036 107204   0   0     0     0  526  1653  96   4   0
 1  0  0 111304   9616   7036 107204   0   0     0     0  552  2219  94   5   1
 1  0  0 111304   9616   7036 107204   0   0     0     0  624   699  98   2   0
 2  0  0 111304   9616   7052 107204   0   0     0    48  603  1466  95   5   0
 3  0  0 111304   9620   7052 107204   0   0     0     0  768   932  90   4   6
 3  0  0 111304   9440   7076 107360  92   0   244     0  820  1230  85   9   6
 2  0  0 111304   9276   7076 107368   0   0     0     0  832  1060  87   6   7
 3  0  0 111304   9624   7092 107372   0   0    16     0  813  1655  93   5   2
 2  0  2 111304   9624   7108 107372   0   0     0   972 1189  1165  68   9  23
      

Durante esta muestra de 10 segundos, la cantidad de memoria libre (el campo free) varía de alguna forma, y hay un poco de E/S relacionada con la memoria de intercambio (los campos si y so), pero en general, este sistema está funcionando bien. Sin embargo, se duda cuánta carga adicional de trabajo pueda manejar, dada la utilización actual de memoria.

Cuando se investiga sobre cuestiones relacionadas a la memoria, a menudo es necesario determinar cómo el subsistema de memoria virtual de Red Hat Enterprise Linux está utilizando el sistema de memoria. Usando sar, es posible examinar este aspecto de rendimiento del sistema con muchos más detalles.

Revisando el informe de sar -r, podemos examinar la utilización de memoria principal y de intercambio más de cerca:

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/22/2003

12:00:01 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached
12:10:00 AM    240468   1048252     81.34         0    133724    485772
12:20:00 AM    240508   1048212     81.34         0    134172    485600
…
08:40:00 PM    934132    354588     27.51         0     26080    185364
Average:       324346    964374     74.83         0     96072    467559
      

Los campos kbmemfree y kbmemused muestran las estadísticas típicas de memoria libre y en uso, mostrando el porcentage de memoria utilizada en el campo %memused. Los campos kbbuffers and kbcached muestran cuántos kilobytes de memoria son asignados a la memoria intermedia (buffers) y a la caché de datos global del sistema.

El campo kbmemshrd siempre es cero para los sistemas usando el kernel 2.4 de Linux (tal como Red Hat Enterprise Linux).

Se han truncado las líneas de este informe para que encajen en la página. He aquí el resto de cada línea, con la marca de tiempo agregada a la izquierda para facilitar la lectura:

12:00:01 AM   kbswpfree kbswpused  %swpused
12:10:00 AM      522104         0      0.00
12:20:00 AM      522104         0      0.00
…
08:40:00 PM      522104         0      0.00
Average:         522104         0      0.00
      

Para la utilización de la memoria de intercambio, los campos kbswpfree y kbswpused muestran la cantidad de espacio de intercambio libre y utilizado, en kilobytes, con el campo %swpused mostrando el espacio de intercambio utilizado como un porcentaje.

Utilice el informe sar -W para conocer un poco más sobre la actividad de memoria de intercambio. A continuación se muestra un ejemplo:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.15      2.56
12:20:00 AM      0.00      0.00
…
03:30:01 PM      0.42      2.56
Average:         0.11      0.37
      

Observe que, en promedio, hay tres veces menos páginas traídas desde la memoria de intercambio (pswpin/s) que las que se devuelven a esta (pswpout/s).

Para entender mejor cómo se utilizan las páginas, consulte el informe sar -B:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pgpgin/s pgpgout/s  activepg  inadtypg  inaclnpg  inatarpg
12:10:00 AM      0.03      8.61    195393     20654     30352     49279
12:20:00 AM      0.01      7.51    195385     20655     30336     49275
…
08:40:00 PM      0.00      7.79     71236      1371      6760     15873
Average:       201.54    201.54    169367     18999     35146     44702
      

Aquí podemos determinar cuántos bloques por segundo son paginados desde el disco (pgpgin/s) y paginados de vuelta al disco (pgpgout/s). Estas estadísticas sirven como un barómetro para la actividad general de la memoria virtual.

Sin embargo, se puede aprender mucho más examinando los otros campos en este informe. El kernel de Red Hat Enterprise Linux marca todas las páginas como activas o inactivas. Como su nombre lo implica, las páginas activas son las que están siendo utilizadas de alguna manera (como páginas de procesos o de memoria intermedia, por ejemplo), mientras que las inactivas no. Este informe de ejemplo muestra que la lista de páginas activas (el campo activepg) promedia aproximadamente 660MB[1].

El resto de los campos en este informe se concentran en la lista inactiva — páginas que, por alguna razón o la otra, no se han utilizado recientemente. El campo inadtypg muestra cuántas páginas inactivas estan sucias (dirty o modificadas) y requieren ser escritas al disco. Por otro lado, el campo inaclnpg, muestra cuántas páginas inactivas están limpias (clean o sin modificar) y no necesitan ser escritas a disco.

El campo inatarpg representa el tamaño deseado de la lista inactiva. Este valor es calculado por el kernel de Linux y tiene un tamaño tal que la lista inactiva permanezca lo suficientemente grande para actuar como un fondo para propósitos de reemplazo de páginas.

Utilice el informe sar -R para datos adicionales sobre el status de páginas (específicamente, la frecuencia con la que las páginas cambian de estado). He aquí un ejemplo de este informe:

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM   frmpg/s   shmpg/s   bufpg/s   campg/s
12:10:00 AM     -0.10      0.00      0.12     -0.07
12:20:00 AM      0.02      0.00      0.19     -0.07
…
08:50:01 PM     -3.19      0.00      0.46      0.81
Average:         0.01      0.00     -0.00     -0.00
      

Las estadísticas sobre este informe particular sar, son únicas, en el sentido de que pueden ser positivas, negativas o cero. Cuando son positivas, el valor indica la tasa a la que se estan incrementando este tipo de páginas. Si es negativo, el valor indica la tasa a la que se estan reduciendo este tipo de páginas. Un valor de cero indica que las páginas de este tipo no se están incrementando ni disminuyendo.

En este ejemplo, la última parte muestra que se asignan un poco más de tres páginas por segundo desde la lista de páginas libres (el campo frmpg/s) y se añade casi una página por segundo a la página caché (el campo campg/s). La lista de páginas utilizadas como memoria de intercambio (el campo bugpg/s) gana aproximadamente una página cada dos segundos, mientras que la lista de páginas de memoria compartidas (el campo shmpg/s) ni gana ni pierde páginas.

Notas

[1]

El tamaño de página bajo Red Hat Enterprise Linux en el sistema x86 utilizado en este ejemplo, es de 4096 bytes. Los sistemas basados en otras arquitecturas pueden tener diferentes tamaños de páginas.