Consumo de recursos del sistema

By | 27 noviembre, 2017

Buenos días,

Como sabrán en la evaluación del trabajo práctico no solo consideramos que el sistema funcione apropiadamente, es decir que cumpla con lo que tiene que hacer, sino que también validamos que el consumo de los recursos del sistema (CPU, RAM) sea razonable para un proceso de esas características.

El mecanismo que utilizamos es el comando: htop

HTOP

Htop es un utilitario de consola de Linux que muestra «graficamente» el consumo de recursos de los distintos procesos ejecutando. Es el análogo al Administrador de Tareas de Windows.

Al ejecutar el comando desde la consola vemos la lista de procesos junto con campos útiles como su PID, el PID de su proceso padre, el usuario que lo ejecuta, ordenados por el porcentaje de uso de CPU.

Luego vemos el consumo de memoria separada en Virtual (VIRT), Fisica (RES), «compartible» (SHR) y el porcentaje correspondiente al total (MEM%).

Sin profundizar demasiado en cada uno de los valores, hay muy buenos documentos escritos sobre el tema, debemos monitorear estos valores para asegurarnos que nuestro trabajo práctico no tenga Memory Leaks o Esperas Activas.

Espera Activa

Una situación donde estamos esperando que suceda una condición y la forma de validarlo es preguntarlo constantemente, por ejemplo: while(a == 0); hace que el consumo de CPU de nuestro proceso normalmente supere el 95%.

Estos casos deben ser evitados utilizando semáforos que desbloqueen el hilo correspondiente al ocurrir determinada condición.

Detectarlos es complicado, sin embargo si notamos que nuestro proceso está en un consumo alto de CPU una herramienta muy util es strace.

Strace nos muestra las llamadas al sistema (syscall) que un proceso está ejecutando permitiendo identificar que operaciones estamos realizando de manera iterativa y sin control.

Para ejecutarlo, desde otra terminal ejecuten:

sudo strace -p [pid del proceso] -ff -s255

Memory Leaks

Es muy común situaciones donde uno solicita un buffer para realizar una operación, por ejemplo recibir un mensaje y lo realiza de manera iterativa, sin liberar dicha memoria. Esto hace que el uso de memoria virtual del proceso (y probablemente el de física) se incremente de manera constante.

Luego de ejecutar unos minutos un proceso, el consumo de memoria supera los cientos de MBs lo que para un trabajo práctico como el nuestro es innecesario, ya que lo que se debe mantener permanentemente en memoria son meramente estructuras administrativas.

Idealmente queremos ver que el consumo de memoria fluctúe (suba y baje) pero nunca un crecimiento sostenido.

Para detectar posibles memory leaks la herramienta ideal es: valgrind. Les dejo el link de un muy buen tutorial de como usarlo: https://faq.utnso.com.ar/valgrind