Ver destacados

Cómo establecer prioridades de procesos Linux con Nice y Renice

En este tutorial te explicamos cómo establecer prioridades en los procesos de las distros Linux usando nice y renice.
Escrito por
30.8K Visitas  |  Publicado sep 18 2017 13:55
Favorito
Compartir
Comparte esta pagina a tus Amigos y Contactos usando las siguientes Redes Sociales


Dentro de las diversas tareas de gestión de sistemas operativos Linux es ideal conocer en detalle cómo funcionan los procesos dentro del sistema ya que esto es fundamental para completar y conocer como, a nivel interno, cada proceso cumple la función para la cual ha sido desarrollado.

 

Hoy Solvetic analizará en detalle cómo establecer prioridades en los procesos de nuestras distros Linux usando nice y renice.

 

Qué son las prioridades de los procesos en Linux
Es importante antes de conocer cómo funcionan nice y renice entender un poco sobre porque establecer una determinada prioridad de un proceso de Linux, la prioridad de un proceso, es usada para determinar la cantidad de tiempo que el proceso seleccionado podrá utilizar el procesador en un intervalo de tiempo específico.

 

En los ambientes Linux, los procesadores son compartidos por múltiples procesos (los procesos se alternan en el uso del o de los procesadores disponibles) lo cual permite al usuario percibir que todas las aplicaciones o tareas son ejecutadas la vez, por ello al definir una prioridad, le indicamos al sistema que procesos pueden hacer más uso de procesador y que procesos pasan a un ocupar un segundo plano.

 

Esta prioridad puede llegar a ocasionar que algunos procesos no sean ejecutados en ningún momento, ya que son desplazados hacia el final de la cola de procesos por otros procesos con una prioridad mayor de uso.

 

Cómo funciona el programador de Kernel en Linux
Otro de los puntos a tener en cuenta cuando administramos sistemas Linux es conocer que el kernel, encargado del arranque. Cuenta con un programador o planificador en su núcleo el cual es una unidad del kernel que determina el proceso más adecuado de todos los procesos ejecutables disponibles, que debe ser ejecutado en primera instancia. Posteriormente asigna el tiempo de procesador entre los procesos ejecutables del sistema.

 

Un proceso ejecutable es aquel que sólo está esperando el tiempo de CPU para ser ejecutado. El programador forma el núcleo de la multitarea en Linux, haciendo uso de un algoritmo de programación basado en la prioridad para seleccionar entre los procesos ejecutables en el sistema. Luego clasifica los procesos basados en los más fundamentales, así como la necesidad de tiempo de CPU de cada uno de ellos.

 

En Linux existe un total de 140 prioridades y dos rangos de prioridad distintos implementados en Linux.:

  • El primero es el valor agradable (niceness) que varía de -20 (valor de prioridad más alta) a 19 (valor de prioridad más baja) y el valor predeterminado es 0.
  • El segundo es la prioridad en tiempo real, que oscila entre 1 y 99 por defecto, luego 100 a 139 están destinados a espacio de usuario.

 


1. Verificación de los valores de los procesos en Linux


En Linux podemos comprobar los valores de un proceso haciendo uso de utilidades como ps, top o htop.
Si hacemos uso del parámetro ps podemos ejecutar lo siguiente:
ps -eo pid,ppid,ni,comm
Allí la columna ni nos revela el valor de cada proceso:

 

 

De forma alternativa podemos hacer uso de los parámetros top o htop donde podremos ver resultados mucho más completos y de forma automática veremos la columna ni con los mismos valores de cada proceso desplegado:

 

top

 

 

htop

 

 

Nota
En caso de no contar con htop podremos instalarlo ejecutando la línea sudo apt install htop

 


2. Diferencia entre PR o PRI y NI y cómo calcular sus valores


Cuando ejecutamos los parámetros top y htop podemos ver las columnas PR, PRI o NI, estas significan:

 

NI
Es un valor amigable, es decir, es un concepto de espacio de usuario

 

PR / PRI
Es la prioridad real del proceso, esta información es provista por el kernel de Linux

 

Estos valores se basan tomando en cuenta lo siguiente.

Número total de prioridades = 140
Intervalo de prioridad en tiempo real (PR o PRI): 0 a 99
Intervalo de prioridad del espacio de usuario: 100 a 139
Rango de valores NI (Valor Nice) -20 a 19:
PR = 20 + NI
PR = 20 + (-20 a + 19)
PR = 20 + -20 a 20 + 19
PR = 0 a 39 que es igual de 100 a 139
Si en los resultados desplegados vemos el valor rt, esto indica que el proceso se ejecuta bajo prioridad de programación en tiempo real.

 


3. Cómo ejecutar un comando con un valor Nice en Linux


Nice se encarga de asignar una prioridad concreta a un programa al ser ejecutado, y por herencia a las tareas y procesos que este programa pueda desencadenar dentro del sistema. Nice aplica cuando contamos con un programa o una tarea que requiere mucho uso de CPU, pero también que este proceso puede tardar mucho tiempo en completarse, allí será posible configurar una prioridad alta o favorable haciendo uso del comando nice.

 

Las sintaxis que podremos usar son las siguientes:

nice -n valor-nice [argumentos del comando]
nice - valor-nice [argumentos del comando]
nice --adjustment = valor-nice [argumentos del comando]
Tengamos en cuenta lo siguiente:
  • Si no se proporciona ningún valor, nice establecerá una prioridad de 10 por defecto
  • Un comando o programa ejecutado sin valores por defecto se establece en una prioridad de cero
  • Sólo el usuario root puede ejecutar un comando o programa con mayor o alta prioridad
  • Los usuarios normales sólo pueden ejecutar un comando o programa con baja prioridad
Para establecer una prioridad, en lugar de iniciar un programa o comando con la prioridad predeterminada, será posible iniciarlo con una prioridad específica mediante el siguiente comando nice:
sudo nice -n -5 xclock &
O bien podemos ejecutar lo siguiente:
sudo nice --adjustment=5 xclock &

 

Podemos ver que se genera un nuevo ID.

 


4. Cambiar la prioridad de programación de un proceso en Linux


Al usar ambientes Linux, este permite la programación dinámica basada en prioridades, por ello, si un programa ya está en ejecución, será posible cambiar su prioridad usando el comando renice de la siguiente forma:
renice -n  -12  -p (PID)
renice -n -2  -u (Aplicación)
Al ejecutar este comando podremos ver la prioridad antigua y la nueva prioridad.

 

 


5. Cómo establecer el valor predeterminado Nice de los procesos de un usuario en particular


Es posible establecer el valor predeterminado de un usuario o grupo específico en el archivo /etc/security/limits.conf. Su función principal consiste en definir los límites de recursos para los usuarios conectados a través de PAM.

 

La sintaxis para definir un límite para un usuario es la siguiente:

<dominio>   <tipo>  <item>  <valor>
De forma alterna, será posible crear un archivo en /etc/security/limits.d/ que se encargue de anular la configuración en el archivo principal y estos archivos sean leídos en orden alfabético.

 

Si deseamos obtener la ayuda de nice o renice podemos ejecutar lo siguiente:

man nice
man renice

 

Así tenemos a mano una opción para establecer las prioridades según sean las necesidades de los procesos optimizando mucho más el uso de la CPU en Linux y mejorando de forma notable las tareas administrativas.

 

Aquí tienes todas las formas con comandos para matar procesos en sistemas Linux además de cómo extraer información útil del sistema.

¿Te ayudó este Tutorial?

Ayuda a mejorar este Tutorial!
¿Quieres ayudarnos a mejorar este tutorial más? Puedes enviar tu Revisión con los cambios que considere útiles. Ya hay 0 usuario que han contribuido en este tutorial al enviar sus Revisiones. ¡Puedes ser el próximo!