Búsqueda de sitios web

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 van más allá el alcance de esta guía. Luego profundizaremos 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 proceso por usuario

Comprender el programador del kernel de Linux

Un programador del 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 sólo espera el tiempo de la CPU y está listo para ejecutarse.

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

Comprender la prioridad del proceso y el gran valor

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 aquellos con 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 (amabilidad) que oscila entre -20 (valor de prioridad más alto) a 19 (valor de prioridad más bajo) y el 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 de 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 buen valor 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 ps, top o htop.

Para ver el valor agradable de los procesos con el comando ps en formato definido por el usuario (aquí la columna NI 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

Diferencia Entre PR o PRI y NI

En las salidas top y htop anteriores, notarás que hay una columna llamada PR y PRI receptivamente 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, tal como lo ve el kernel de Linux.
Cómo calcular los valores PR o PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Buen rango de valores (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 siguiente, básicamente significa que el proceso se está ejecutando con prioridad de programación en tiempo real.

Cómo ejecutar un comando con un valor Niza determinado 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 tardar mucho en completarse, puede establecerle una prioridad alta o favorable usando el comandonice.

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 ejecutado sin Niza tiene por defecto una prioridad de cero.
  • Sólo el root puede ejecutar un comando o programa con prioridad alta o aumentada.
  • Los usuarios normales sólo 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 agradable.

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

También puedes utilizar 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 antes, Linux permite la programación dinámica basada en prioridades. Por lo tanto, si un programa ya se está ejecutando, puedes cambiar su prioridad con el comando renice de esta forma:

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

Del resultado top de muestra a continuación, la bondad del teamspe+ con PID 1055 ahora es -12 y para todos Los procesos propiedad del usuario Apache son -2.

Aún usando este resultado, puedes ver la fórmula PR=20 + NI significa,

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

Cualquier cambio que realice con el comando renice en los valores agradables de los procesos de un usuario solo se aplica hasta el próximo reinicio. Para establecer valores predeterminados permanentes, lea la siguiente sección.

Cómo establecer el valor 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 que inician sesión 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 duro significa hacer cumplir los enlaces duros y suave significa hacer cumplir los límites suaves.

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

Como alternativa, cree un archivo en /etc/security/limits.d/ que anule la configuración del archivo principal anterior y estos archivos se lean 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 un PR de 30.

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

man nice
man renice 

Quizás también le interese leer los 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 de los comandos Kill, Pkill y Killall para finalizar un proceso en Linux
  3. Cómo monitorear el uso del sistema, las interrupciones y solucionar problemas de servidores Linux
  4. CPUTool: limite y controle 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, vimos 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 idea sobre este tema a través del formulario de comentarios a continuación.