Skip to content

Afinando Linux para un mejor rendimiento

5/mayo/2010

Este es otro artículo del 2006 que desempolve del antiguo sitio web (que ya no existe) y que he decidido republicar en WordPress para beneficio de todos.

Tal vez sientas que puedes exprimir mas tu sistema Linux y tu hardware. Bien, eso es correcto, y no hace falta ser un experto para alcanzar un mejor rendimiento de nuestro sistema Linux. En este artículo veremos como “afinar” a nuestro pinguino.

SYSSTAT

Existe un paquete llamado Sysstat que contiene herramientas para monitorizar el rendimiento del sistema y sus actividades. Sysstat contiene la utilidad sar, común en muchos Unix comerciales, y herramientas que puedes programar via cron para recolectar datos de rendimiento y actividad y así mantener un historial. Se utilizan tradicionalmente en sistemas Unix para medir rendimientos, averiguar cuellos de botella, detectar configuraciones erroneas, etc.

El paquete Sysstat esta compuesto de las siguientes herramientas:

  • iostat: Muestra estadísticas de la CPU y estadisticas de entrada/salida para dispositivos y particiones.
  • mpstat: Muestra estadísticas individuales o combinadas relacionadas con procesadores.
  • sar: Recopila, muestra y salva información sobre la actividad del sistema.
  • isag: Visualiza gráficos de la actividad del sistema.

IOSTAT

IOSTAT (Input Output statistics) proporciona información sobre las E/S (escrituras y lecturas) en el sistema.

Sintaxis basica: iostat opciones intervalo contador

  • opciones: permite especificar de cual dispositivo se necesita información como disco o cpu. (-d , -c). La opción x entrega estadisticas extendidas.
  • intervalo: es el periodo de segundos entre dos muestras.
  • contador: es el numero de veces que se recolectaran datos.

Salida para iostat:

iostat
Linux 2.6.13-15.12-default (supermicrotek)      07/10/06

cpu-med:  %user   %nice    %sys %iowait   %idle
          11,68    6,13   12,67    0,78   68,74

Device:            tps   Blq_leid/s   Blq_escr/s   Blq_leid   Blq_escr
fd0               0,00         0,00         0,00          8          0
sda               6,90       279,07       117,31   24455839   10280157
hda               0,15         0,27         0,72      23670      63024

iostat -c 5 2
Linux 2.6.13-15.12-default (supermicrotek)      07/10/06

Tiempo: 19:00:31
cpu-med:  %user   %nice    %sys %iowait   %idle
          11,67    6,12   12,65    0,78   68,78

Tiempo: 19:00:36
cpu-med:  %user   %nice    %sys %iowait   %idle
           0,40    0,00    0,20    0,20   99,20

iostat -dx 5 2
Linux 2.6.13-15.12-default (supermicrotek)      07/10/06

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s  ...  avgqu-sz   await  svctm  %util
fd0          0,00   0,00  0,00  0,00    0,00    0,00  ...      0,00   24,00  24,00   0,00
sda        169,00  14,83  4,16  2,71  277,06  116,95  ...      0,05    7,69   1,65   1,13
hda          0,12   0,71  0,14  0,01    0,27    0,71  ...      0,00    2,92   1,12   0,02

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s  ...  avgqu-sz   await  svctm  %util
fd0          0,00   0,00  0,00  0,00    0,00    0,00  ...      0,00    0,00   0,00   0,00
sda          0,00   2,59  0,00  0,40    0,00   23,95  ...      0,00    0,00   0,00   0,00
hda          0,00   0,00  0,00  0,00    0,00    0,00  ...      0,00    0,00   0,00   0,00

Diferentes resultados obtenidos en mi sistema con un disco duro SATA de 160gb

RESULTADOS Y SOLUCIONES PARA IOSTAT

Los valores vistos en la salida de iostat son:

  • Lecturas (read) y Escrituras (write) por segundo (r/s y w/s)
  • Tiempo de espera en milisegundos para las peticiones de I/O (lectura/escritura) en el dispositivo (await)
  • Tiempo de servicio promedio (svctm) para las peticiones de I/O enviadas al dispositivo.
  • Porcentaje de tiempo de CPU usado durante las peticiones de I/O en el dispositivo (%util). Saturación de dispositivos ocurren cuando este valor se encuentra cerca del 100%.

Si un disco muestra consistentemente altas lecturas/escrituras con el porcentaje de ocupado (%util) del disco mayor que 5% y el promedio de tiempo de servicio (svct) es mayor a 30 milisegundos, entonces debe realizar una de las siguientes acciones:

  1. Ajustar la aplicación para realizar lecturas/escrituras mas eficientemente modificando las consultas a disco y usando la cache disponible para apoyar las aplicaciones en los servidores.
  2. Dividir el sistema de archivos del disco actual en dos o mas discos.
  3. Mover el sistema de archivo a otro disco más rápido o reemplazar el disco existente por otro más rápido.

VMSTAT

VMSTAT (Virtual Memory Statistics) es una herramienta que entrega un reporte estadístico de la memoria virtual, procesos, paginación, actividad de la CPU, etc.

Salida para vmstat:

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0  70892   9728   5292 120144    0    1   140    59  416   409 18 13 69  1

Detalles de la información obtenida:

  • Procs:
    • r: El número de procesos esperando su tiempo de ejecución.
    • b: El número de procesos en espera ininterrumpible.
  • Memory:
    • swpd: la cantidad de memoria virtual empleada (kB).
    • free: la cantidad de memoria inactiva (kB).
    • buff: la cantidad de memoria empleada como búferes (kB).
    • cache: la cantidad de memoria empleada como cache (kB).
  • Swap:
    • si: Cantidad de memoria traída del espacio swap desde disco (kB/s).
    • so: Cantidad de memoria almacenada en el swap del disco (kB/s).
  • IO:
    • bi: Bloques enviados a un dispositivo de bloques (bloques/s).
    • bo: Bloques recibidos desde un dispositivo de bloques (bloques/s).
  • System:
    • in: El número de interrupciones por segundo, incluyendo al reloj.
    • cs: El número de cambios de contexto por segundo.
  • Éstos son porcentajes de tiempo total de CPU.
    • us: tiempo de usuario
    • sy: tiempo de sistema
    • id: tiempo de inactividad
    • wa: tiempo de espera

RESULTADOS Y SOLUCIONES PARA VMSTAT

  1. Si el número de procesos en cola de ejecucion (procs r) son constantemente mayores que el numero de CPUs en el sistema, se retrasará el sistema pues hay mas procesos que CPU disponibles.
  2. Si el número es mayor de 4 veces el numero de CPUs disponibles en el sistema, entonces el sistema se enfrenta a una escasez de poder de CPU y retrasará enormemente los procesos.
  3. Si el tiempo de inactividad (cpu id) es constantemente 0 y si el tiempo de sistema (cpu sy) es el doble del tiempo de usuario (cpu us) el sistema se enfrenta a una escasez de recursos de CPU.

Solución

La solución a este tipo de problemas implica ajustar los procesos de las aplicaciones para hacer un uso más eficiente de la CPU y como último recurso incrementar la potencia de la CPU o agregar más CPUs al sistema.

MONITORIZANDO EL SISTEMA EN LA LINEA DE COMANDOS

El usuario puede utilizar los comandos PS, TOP y FREE para monitorizar el sistema desde la línea de comandos. PS indica los procesos que se estan ejecutando en el sistema, TOP muestra los procesos que más CPU consumen y FREE reporta el uso de la memoria RAM, SWAP y Libre en el sistema.

  • top: (table of processes) proporciona una visión continuada de la actividad del procesador en tiempo real. Muestra un listado de las tareas que hacen un uso más intensivo de la CPU en el sistema, y puede proporcionar una interfaz interactiva para manipular procesos. Puede clasificar las tareas por uso de CPU, uso de memoria y tiempo de ejecución. Para más información digite man top en la consola.El listado se actualiza cada 2 segundos. Para salir, pulse Q. La opción -n 1 cierra el programa tras mostrar la lista de procesos una sola vez. A continuació se muestra un ejemplo de la salida de top -n 1:
alex@supermicrotek:~> top -n 1
top - 20:07:15 up  2:23,  3 users,  load average: 0.04, 0.05, 0.02
Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.2% us,  4.5% sy,  0.0% ni, 88.4% id,  0.0% wa,  0.9% hi,  0.0% si
Mem:    515784k total,   496156k used,    19628k free,     8940k buffers
Swap:   265064k total,     3336k used,   261728k free,   185740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5603 root      16   0  126m  49m 5696 R  7.3  9.9   5:49.93 X
 6481 alex      15   0 31072  16m  13m S  1.8  3.3   0:13.72 konsole
    1 root      16   0   688  260  224 S  0.0  0.1   0:00.96 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    3 root      10  -5     0    0    0 S  0.0  0.0   0:00.16 events/0
    4 root      14  -5     0    0    0 S  0.0  0.0   0:00.01 khelper
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread
   11 root      20  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid
  395 root      10  -5     0    0    0 S  0.0  0.0   0:00.05 kblockd/0
  430 root      15   0     0    0    0 S  0.0  0.0   0:00.00 pdflush
  431 root      15   0     0    0    0 S  0.0  0.0   0:00.00 pdflush
  433 root      11  -5     0    0    0 S  0.0  0.0   0:00.00 aio/0
  432 root      15   0     0    0    0 S  0.0  0.0   0:00.14 kswapd0
 1025 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kseriod
 1150 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 ata/0
 1155 root      25   0     0    0    0 S  0.0  0.0   0:00.00 scsi_eh_0
 1156 root      25   0     0    0    0 S  0.0  0.0   0:00.00 scsi_eh_1
 1303 root      15   0     0    0    0 S  0.0  0.0   0:00.15 kjournald
 2275 root      16   0  2572 1212  848 S  0.0  0.2   0:00.00 mount.ntfs-3g
  • ps: (process status) muestra una instantánea de los procesos actuales. Si quiere una actualización contínua, use top. Para más información digite man ps en la consola.
alex@supermicrotek:~> ps
  PID TTY          TIME CMD
 6826 pts/0    00:00:00 bash
 9472 pts/0    00:00:00 ps
alex@supermicrotek:~> ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0    688   260 ?        S    17:43   0:00 init [5]
root         2  0.0  0.0      0     0 ?        SN   17:43   0:00 [ksoftirqd/0]
root         3  0.0  0.0      0     0 ?        S<   17:43   0:00 [events/0]
root         4  0.0  0.0      0     0 ?        S<   17:43   0:00 [khelper]
root         5  0.0  0.0      0     0 ?        S<   17:43   0:00 [kthread]
root        11  0.0  0.0      0     0 ?        S<   17:43   0:00 [kacpid]
root       395  0.0  0.0      0     0 ?        S<   17:43   0:00 [kblockd/0]
root       430  0.0  0.0      0     0 ?        S    17:43   0:00 [pdflush]
root       431  0.0  0.0      0     0 ?        S    17:43   0:00 [pdflush]
root       433  0.0  0.0      0     0 ?        S<   17:43   0:00 [aio/0]
root       432  0.0  0.0      0     0 ?        S    17:43   0:00 [kswapd0]
root      1025  0.0  0.0      0     0 ?        S<   17:43   0:00 [kseriod]
...
  • free: muestra la cantidad total de memoria fisica y de intercambio (swap) presente en el sistema, asi como la memoria compartida y los buffers usados por el núcleo.
alex@supermicrotek:~> free
             total       used       free     shared    buffers     cached
Mem:        515784     242584     273200          0      13484     132316
-/+ buffers/cache:      96784     419000
Swap:       265064          0     265064

MONITORIZANDO GRAFICAMENTE EL SISTEMA

gKrellM: es un programa que nos permite monitorizar el sistema, a través de una pila de monitores para la memoria principal, la memoria swap, uso de la CPU, procesos abiertos, uso del disco duro, trafico de red, cantidad de usuarios conectados en el sistema, el tiempo activo del sistema (uptime). Ademas se pueden ampliar sus funciones a traves de plugins.

xload: Presenta un histograma del promedio de carga del sistema. Puede resultar decorativo, e incluso indicativo en algún momento, pero no da muchos detalles ni puede hacerse un estudio basándose en él solamente.

KSysGuard: Mucho mas completo que xload, muestra graficos con indicadores de uso de CPU, carga, memoria RAM y SWAP.

Monitor del sistema Gnome: Mucho mas completo que xload y KSysGuard, muestra los procesos en memoria, graficos con indicadores de uso de CPU, memoria RAM/SWAP y tráfico de red, además muestra información de los dispositivos.

DISMINUIR LOS TERMINALES VIRTUALES

No todas las distros traen de manera predeterminada 6 terminales virtuales (las que se obtienen presionando simultaneamente CTRL+ALT+F1 por ejemplo), pero tu no necesitas tantos. Si necesitas solo uno o dos, puedes modificar el archivo inittab y asi obtener un poco mas de memoria libre.

Abre un terminal y modifica el archivo:

sudo vi /etc/inittab

Busca las siguientes lineas y modificalas:

# getty-programs for the normal runlevels
# :::
# The "id" field  MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Comenta los terminales que no utilices agregando una # al principio de la linea:

# getty-programs for the normal runlevels
# :::
# The "id" field  MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6

Estos son los resultados que obtuve con free antes y despues de la modificacion (y reinicio del sistema):

Estado del sistema: Memoria ocupada Memoria libre
Antes 301.424 214.360
Despues 241.848 273.936

Enlaces:

Anuncios

Los comentarios están cerrados.

A %d blogueros les gusta esto: