Cómo establecer la prioridad del proceso de Linux usando los comandos nice y renice


En este artículo, explicaremos brevemente el programador del kernel (también conocido como programador de procesos) y la prioridad del proceso, que son temas que escapan al alcance de esta guía. Luego nos sumergiremos un poco en la gestión de procesos de Linux: veremos cómo ejecutar un programa o comando con prioridad modificada y también cambiar la prioridad de ejecución de procesos de Linux.

Lea también: Cómo monitorear los procesos de Linux y establecer límites de procesos por usuario

Un programador de kernel es una unidad del kernel que determina el proceso más adecuado de todos los procesos ejecutables para ejecutar a continuación; asigna tiempo de procesador entre los procesos ejecutables en un sistema. Un proceso ejecutable es aquel que solo espera el tiempo de la CPU, está listo para ejecutarse.

El programador forma el núcleo de la multitarea en Linux, utilizando un algoritmo de programación basado en prioridades para elegir entre los procesos ejecutables en el sistema. Clasifica los procesos según los más merecedores y la necesidad de tiempo de CPU.

El kernel almacena una gran cantidad de información sobre los procesos, incluida la prioridad del proceso, que es simplemente la prioridad de programación adjunta a un proceso. Los procesos con mayor prioridad se ejecutarán antes que los de menor prioridad, mientras que los procesos con la misma prioridad se programan uno tras otro, repetidamente.

Hay un total de 140 prioridades y dos rangos de prioridad distintos implementados en Linux. El primero es un valor agradable (bondad) que va desde -20 (valor de prioridad más alto) a 19 (valor de prioridad más bajo) y el valor predeterminado es 0 , esto es lo que descubriremos en esta guía. La otra es la prioridad en tiempo real, que varía de 1 a 99 de forma predeterminada, luego 100 a 139 están destinados al espacio de usuario.

Una característica importante de Linux es la programación dinámica basada en prioridades, que permite cambiar (aumentar o disminuir) el valor agradable de los procesos según sus necesidades, como veremos más adelante.

Cómo comprobar el buen valor de los procesos de Linux

Para ver los buenos valores de los procesos, podemos usar utilidades como htop.

Para ver los procesos de valor agradable con el comando ps en formato definido por el usuario (aquí el NI la columna muestra la bondad de los procesos).

$ ps -eo pid,ppid,ni,comm

Alternativamente, puede usar las utilidades top o htop para ver los valores agradables de los procesos de Linux como se muestra.

$ top
$ htop

En las salidas superior e superior anteriores, notará que hay una columna llamada PR y PRI de forma receptiva que muestra la prioridad de un proceso.

Esto, por tanto, significa que:

  • NI - es el valor agradable, que es un concepto de espacio de usuario, mientras que
  • PR o PRI : es la prioridad real del proceso, como lo ve el kernel de Linux.

Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Rango de valor agradable (NI): -20 a 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Pero si ve un rt en lugar de un número como se muestra en la captura de pantalla a continuación, básicamente significa que el proceso se está ejecutando con prioridad de programación en tiempo real.

Cómo ejecutar un comando con un buen valor dado en Linux

Aquí, veremos cómo priorizar el uso de CPU de un programa o comando. Si tiene un programa o una tarea que consume mucha CPU, pero también comprende que puede llevar mucho tiempo completarlo, puede configurarlo con una prioridad alta o favorable usando el comando nice.

La sintaxis es la siguiente:

$ nice -n niceness-value [command args] 
OR
$ nice -niceness-value [command args] 	#it’s confusing for negative values
OR
$ nice --adjustment=niceness-value [command args]

Importante:

  • Si no se proporciona ningún valor, nice establece una prioridad de 10 de forma predeterminada.
  • Un comando o programa que se ejecuta sin un buen valor predeterminado tiene una prioridad de cero.
  • Solo root puede ejecutar un comando o programa con mayor o alta prioridad.
  • Los usuarios normales solo pueden ejecutar un comando o programa con baja prioridad.

Por ejemplo, en lugar de iniciar un programa o comando con la prioridad predeterminada, puede iniciarlo con una prioridad específica usando el siguiente comando nice.

$ sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
$ sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

También puede utilizar el tercer método, que es un poco confuso, especialmente para los valores negativos de bondad.

$ sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

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

Como mencionamos anteriormente, Linux permite la programación dinámica basada en prioridades. Por lo tanto, si un programa ya se está ejecutando, puede cambiar su prioridad con el comando renice de esta forma:

$ renice -n  -12  -p 1055
$ renice -n -2  -u apache

De la salida superior de muestra a continuación, la bondad de teamspe + con PID 1055 ahora es -12 y para todos los procesos propiedad del usuario apache es -2 .

Aún usando esta salida, puede ver la fórmula PR u003d 20 + NI se encuentra,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Cualquier cambio que realice con el comando renice a los valores nice de los procesos de un usuario solo se aplicará hasta el siguiente reinicio. Para establecer valores predeterminados permanentes, lea la siguiente sección.

Cómo establecer un valor agradable predeterminado de los procesos de un usuario específico

Puede establecer el valor agradable predeterminado de un usuario o grupo en particular en el archivo /etc/security/limits.conf. Su función principal es 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 (y los posibles valores de las distintas columnas se explican en el archivo):

#<domain>   <type>  <item>  <value>

Ahora use la sintaxis a continuación donde estricto - significa hacer cumplir los vínculos físicos y los medios suaves - hacer cumplir los límites suaves.

<username>  <hard|soft>  priority  <nice value>

Alternativamente, cree un archivo en /etc/security/limits.d/ que anula la configuración del archivo principal anterior, y estos archivos se leen en orden alfabético.

Comience creando el archivo /etc/security/limits.d/tecmint-priority.conf para el usuario tecmint:

# vi /etc/security/limits.d/tecmint-priority.conf

Luego agregue esta configuración en él:

tecmint  hard  priority  10

Guarde y cierre el archivo. A partir de ahora, cualquier proceso propiedad de tecmint tendrá un buen valor de 10 y PR de 30.

Para obtener más información, lea las páginas man de nice y renice:

$ man nice
$ man renice 

También le gustaría leer estos siguientes artículos sobre la gestión de procesos de Linux.

  1. Cómo encontrar y eliminar procesos en ejecución en Linux
  2. Una guía para los comandos Kill, Pkill y Killall para finalizar un proceso en Linux
  3. Cómo supervisar el uso del sistema, las interrupciones y la solución de problemas de los servidores Linux
  4. CPUTool: limitar y controlar la utilización de la CPU de cualquier proceso en Linux

En este artículo, explicamos brevemente el programador del kernel, la prioridad del proceso, analizamos cómo ejecutar un programa o comando con prioridad modificada y también cambiamos la prioridad de los procesos activos de Linux. Puede compartir sus pensamientos sobre este tema a través del formulario de comentarios a continuación.