Unix: Prioridad de un proceso


-- Descargar Unix: Prioridad de un proceso como PDF --


Prioridad de un Proceso en Unix

Los comandos nice y renice nos permiten manejar la prioridad de un proceso en un sistema Unix.. Según dicha prioridad, el kernel le asignará un cierto % del tiempo de CPU destinado a dicho proceso.

La prioridad por defecto, es de 0, siendo la máxima prioridad -20 y la mínima 19. Muchas veces sucederá(muy común en servidores, pero también en nuestros propios equipos) que tenemos varios procesos importantes corriendo, pero uno de ellos es crítico y no queremos que sea afectado por los demás.

Tal es el caso que me llevó a leer un poco más del tema, en el que en un servidor web, el backup semanal provoca demasiada carga en el servidor y los sitios alojados en él se vuelven inestables. El backup es algo que no quiero interrumpir, pero es crítico que los sitios alojados allí permanezcan funcionando(Excepto que el servidor sea un ambiente de desarrollo, aunque en tal caso el backup ya no es tan importante y podría detenerse hasta investigar por qué es tan pesado y qué se puede hacer al respecto, tema aparte).

Sintaxis de nice

nice [opciones] [comando [argumentos]]

Ejemplo:

nice -n 19 tar zcf wwwroot-`date +%F-%s` /var/www/

Como ven, se trataría de un comando para hacer el backup local de todo el directorio raíz de los sitios web. El parámetro -n de nice, obviamente, está definiendo la prioridad a asignar a dicho proceso. Le doy la más baja para que no afecte a mis sitios, sacrificando la velocidad del empaquetado. Este es un ejemplo nada más, que no es aconsejable. Si mi raíz tuviera un tamaño considerable, el empaquetado podría demorar demasiado. Si estuviera programado para correr el domingo a la noche, podría estar aún corriendo al llegar el lunes, lo cual no es una buena idea porque se supone que, si se trata de sitios de negocios, serán más visitados en horarios regulares de comercio.

Por lo tanto, tengan cuidado con nice y no lo usen «a ciegas»

Volviendo al tema

Ahora bien, cómo cambiar la prioridad de un proceso ya corriendo? Para ello usamos renice especificando el PID del proceso:

Supongamos que quiero subir un poco la prioridad de mi backup del ejemplo anterior. Puedo obtener el PID usando ps fax | grep tar. Este comando me devuelve una lista de los procesos en ejecución y lo refina, buscando (grep) los que contengan «tar». De los resultados voy a poder distinguir el que me interesa y sacar el PID correspondiente.

Luego usaremos la siguiente sintaxis de renice:

renice -n 15 -p xxxx

(Donde -p es la opción de especificar el PID del proceso cuya prioridad queremos modificar y xxxx es, el PID en cuestión).

xxxx: old priority 0, new priority -10

Eventualmente, podría sernos útil la siguiente sintaxis, que sirve para modificar la prioridad de los procesos de un usuario determinado:

renice -n 10 -u usuario

O bien, todos los procesos de usuarios que pertenecen a un determinado grupo:

renice -n 5 -g grupo

Pueden encontrar más información en wikipedia: https://en.wikipedia.org/wiki/Nice_%28Unix%29

En este artículo he querido explicar clara y resumidamente en qué consiste y cómo funciona este tema de la prioridad de los procesos en sistemas Unix. Obviamente, hay mucho más al respecto. No duden en comentar sus dudas y, como siempre, cualquier sugerencia es bienvenida!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *