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


En este artículo, explicaremos brevemente el programador del núcleo (también conocido como el programador del proceso ) y la prioridad del proceso , que son temas más allá El alcance de esta guía. Luego, nos sumergiremos en un poco de la administración de procesos de Linux: vea cómo ejecutar un programa o comando con prioridad modificada y también cambiar la prioridad de ejecutar procesos de Linux.

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

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

El programador forma el núcleo de la multitarea en Linux, utilizando un algoritmo de planificación basado en la prioridad para elegir entre los procesos ejecutables en el sistema. Clasifica los procesos en función del tiempo de CPU más merecido y necesario.

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 asociada a un proceso. Los procesos con una prioridad más alta se ejecutarán antes de los que tienen una prioridad más baja, mientras que los procesos con la misma prioridad se programarán uno después de otro, repetidamente.

Hay un total de 140 prioridades y dos rangos de prioridad diferentes implementados en Linux. El primero es un buen valor ( amabilidad ) que varía 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 para el espacio de usuario.

Una característica importante de Linux es la programación dinámica basada en la prioridad, que permite que el buen valor de un proceso se modifique (aumente o disminuya) 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 ps, top o htop.

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

$ ps -eo pid,ppid,ni,comm

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

$ top
$ htop

Desde las salidas top y htop de arriba, notará que hay una columna llamada PR y PRI receptivamente que muestran la prioridad de un proceso.

Esto por lo tanto significa que:

  • NI – is the nice value, which is a user-space concept, while
  • PR or PRI – is the process’s actual priority, as seen by the Linux kernel.
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Rango de valores agradables (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 una 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 la CPU de un programa o comando. Si tiene un programa o una tarea con un uso intensivo de la CPU, pero también comprende que puede tardar mucho tiempo en completarse, puede establecer una prioridad alta o favorable con 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:

  • If no value is provided, nice sets a priority of 10 by default.
  • A command or program run without nice defaults to a priority of zero.
  • Only root can run a command or program with increased or high priority.
  • Normal users can only run a command or program with low priority.

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 agradable.

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

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

$ 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 la prioridad. 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

A partir de la salida superior a continuación, la simpatía del teamspe + con PID 1055 es ahora -12 y para todos Los procesos que posee el usuario apache son -2 .

Aún utilizando esta salida, puede ver que la fórmula PR = 20 + NI está de pie,

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

Todos los cambios que realice con comando de cambio en los procesos de los valores de un usuario son válidos solo hasta el próximo reinicio. Para establecer valores predeterminados permanentes, lea la siguiente sección.

Cómo establecer el valor de Niza 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 registrados a través de PAM.

La sintaxis para definir un límite para un usuario es la siguiente (y los valores posibles de las distintas columnas se explican en el archivo):

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

Ahora use la sintaxis que se encuentra a continuación donde es difícil: significa hacer cumplir los enlaces duros y medios flexibles: hacer cumplir los límites flexibles.

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

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

Comience por crear 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 ella:

tecmint  hard  priority  10

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

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

$ man nice
$ man renice 

Es posible que también desee leer estos artículos siguientes sobre la administración de procesos de Linux.

  1. How to Find and Kill Running Processes in Linux
  2. A Guide to Kill, Pkill and Killall Commands to Terminate a Process in Linux
  3. How to Monitor System Usage, Outages and Troubleshoot Linux Servers
  4. CPUTool – Limit and Control CPU Utilization of Any Process in 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 cambiar la prioridad de los procesos activos de Linux. Puede compartir cualquier opinión sobre este tema a través del formulario de comentarios a continuación.