Comando nice de Linux: asignar la prioridad, cambiarla con renice y medir el reparto de CPU cuando hay competencia

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (móvil)
Entorno de pruebaFamilia RHELAlmaLinux 9.8root · cuenta de usuario normalVerificado el 2026-10-17

El comando nice de Linux asigna el valor nice (de -20 a 19), que decide cuánta CPU cede un programa a los demás al ejecutarse. En un servidor AlmaLinux 9 se fijaron dos tareas a un solo núcleo de CPU y se midió cambiando el valor nice: el reparto solo se produjo cuando competían por la CPU, y la tarea con nice 19 usó apenas un 1,4 %.

Los procesos que ya están en ejecución se cambian con renice, y ceder el disco le corresponde a ionice. De los tres comandos se muestra tal cual la salida obtenida al ejecutarlos como root y como usuario normal.

1️⃣ Comando nice de Linux: rango de valores y reparto de CPU cuando hay competencia

El valor nice es un número que fija cuánto cede un proceso cuando se reparte el tiempo de CPU, y puede ir de -20 a 19. Los programas suelen ejecutarse con 0; -20 se atiende primero y 19 es el que más cede.

Es fácil pensar que un número mayor se atiende antes, pero con el valor nice es al revés. El planificador de Linux asigna un peso a cada valor nice y reparte el tiempo de CPU en esa proporción: nice 0 pesa 1024, 10 pesa 110 y 19 pesa 15.

Ceder solo ocurre cuando hay competencia por la CPU. Si hay una CPU libre, hasta una tarea con nice 19 se ejecuta sin esperar. Es como los asientos reservados del autobús: si están libres, cualquiera se sienta, y solo se ceden cuando va lleno.

🧭 El valor nice con la CPU libre y con competencia
Diagrama explicativo
🖥️ CPU
⚖️ Tarea B
🖥️ Hay una CPU libre, así que cada tarea tiene su propio núcleo🖥️ Dos tareas comparten un núcleo de CPU
Tarea Anice 0 · peso 1024
100%50.0%90.3%98.6%
Tarea Bnice 0 · peso 1024nice 10 · peso 110nice 19 · peso 15
100%50.0%9.7%1.4%
Si sobra CPU no hay a quién ceder, así que la tarea B usa la CPU por completo sea cual sea su valor nice.
Si compiten por el mismo núcleo, dos tareas con nice 0 y el mismo peso se reparten el tiempo de CPU a partes iguales.
nice 10 pesa 110, aproximadamente una novena parte de nice 0 (1024), así que el tiempo de CPU se reparte en torno a 90,3 : 9,7.
nice 19 pesa 15; con competencia, la tarea B solo usa alrededor del 1,4 % del tiempo de CPU.

La tabla de pesos es el array [sched_prio_to_weight] del código fuente del kernel de Linux [kernel/sched/core.c], y está pensada para que cada punto que sube el valor nice reduzca el tiempo de CPU en torno a un 10 %.

2️⃣ Uso básico de nice: +10 si se omite el número y valores fuera de rango

Si pones un comando después de nice, ese comando se ejecuta con otro valor nice; si escribes nice solo, muestra el valor nice de la shell actual.

nice
0

En los ejemplos siguientes, el bash que se lanza muestra su propio valor nice con [ps -o ni=]. Sin -n se suma 10 al valor actual, y con -n 5 se suma 5.

nice bash -c 'ps -o ni= -p $$'
 10
nice -n 5 bash -c 'ps -o ni= -p $$'
  5

Los valores fuera de rango se ajustan al límite sin dar error, así que -n 50 se ejecuta con 19.

nice -n 50 bash -c 'ps -o ni= -p $$'
 19

Solo root puede adelantar un proceso con un valor negativo. Un usuario normal ve la advertencia [cannot set niceness] y el comando se ejecuta igualmente con nice 0.

# como usuario normal
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# como root
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

Los procesos hijo que lanza un comando ejecutado con nice también se ejecutan con el mismo valor nice.

nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!'
  7

Por eso, si ejecutas un script con nice, todos los comandos que contiene ceden.

3️⃣ renice: cambiar el valor nice de un proceso en ejecución

nice solo fija el valor al arrancar, así que un proceso que ya está en ejecución se cambia con renice. Primero consulta el PID y el valor actual en la columna NI de top o con ps.

ps -o pid,ni,cmd -p 201643
    PID  NI CMD
 201643   5 sleep 600
renice -n 10 -p 201643
201643 (process ID) old priority 5, new priority 10

Como muestra la salida, renice -n no suma al valor actual sino que lo fija en el valor indicado: el resultado es 10, no 5 + 10 = 15. No es como pulsar ▲ en el mando del aire acondicionado para subir un grado, sino como fijar la temperatura deseada en 24 grados.

La documentación oficial de util-linux también describe -n como un valor absoluto; sumar le corresponde a la opción [--relative] de las versiones nuevas. util-linux 2.37.4, la versión probada, no tenía esta opción.

Un usuario normal solo puede subir el valor de sus propios procesos y, una vez subido, no puede volver a bajarlo.

# como usuario normal
renice -n 10 -p 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): Permission denied

root también puede bajarlo; en la misma prueba cambió 10 directamente a 3.

🔲 Simulador de nice · renice

En el simulador de abajo, conectado como usuario normal, puedes escribir nice y renice tú mismo y ver cómo cambia el valor nice.

Simulador del comando nicenice 8.32 · renice 2.37.4
[root@server work]#
Funciona solo dentro del navegador y no toca ningún proceso real. Es un servidor virtual conectado como usuario normal: ejecuta algo con otro valor nice o cambia el valor de backup.sh (PID 2481) con renice, y compruébalo con ps -o pid,ni,cmd. Con las teclas ↑↓ recuperas los comandos anteriores.

4️⃣ Medición del reparto de CPU con competencia: nice 0 vs 0·10·19

Subir el valor nice no siempre hace más lenta la tarea. Su parte solo se reduce cuando compite con otra tarea por la misma CPU.

Se fijaron dos tareas a un solo núcleo de CPU (taskset) y se ejecutó a la vez en ambas el script de abajo, que cuenta de uno en uno durante 5 segundos. Cuanto mayor es la cuenta, más tiempo de CPU usó la tarea.

#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n

El script suma 1 a n hasta que pasan 5 segundos y luego muestra el valor final.

📊5 segundos compitiendo por un núcleoCuenta alcanzada en 5 segundos
Primera tarea nice 0Segunda tarea
nice 0 vs nice 0
Dos tareas con el mismo peso.
0250 mil500 mil750 mil1 millón
nice 0497.59648.8%
nice 0522.04051.2%
nice 0 vs nice 10
Solo la segunda tarea se ejecuta con nice 10.
0250 mil500 mil750 mil1 millón
nice 0979.97190.1%
nice 10107.6719.9%
nice 0 vs nice 19
Solo la segunda tarea se ejecuta con nice 19.
0250 mil500 mil750 mil1 millón
nice 0909.89598.6%
nice 1913.0101.4%
Cifras obtenidas el 17 de octubre de 2026 en un servidor AlmaLinux 9, con las dos tareas fijadas a un núcleo de CPU y ejecutadas a la vez durante 5 segundos.

Dos tareas con nice 0 se repartieron la CPU a medias, mientras que nice 10 usó cerca del 10 % y nice 19 solo el 1,4 %. Coincide con las proporciones calculadas a partir de los pesos del kernel (1024 : 110 da 90,3 : 9,7, y 1024 : 15 da 98,6 : 1,4).

Ejecutada sola en el mismo núcleo, la tarea con nice 19 contó entre unas 650.000 y 1.140.000 veces en 5 segundos. Sin nadie a quien ceder, incluso nice 19 usa la CPU por completo; la carga del servidor (load average) fue de 3 a 5 durante la prueba.

5️⃣ ionice: ceder el disco y comprobar el planificador

nice solo decide el reparto de CPU, así que las tareas que leen y escriben en disco durante mucho tiempo, como las copias de seguridad, ceden también su turno de disco con ionice. Con -c3 (idle), solo se atienden cuando ningún otro programa usa el disco.

ionice -c3 bash -c 'ionice -p $$'
idle
ionice -p $$
none: prio 0

Un proceso sin clase asignada aparece como [none]; según la documentación del kernel, se trata como best-effort y su prioridad se calcula a partir del valor nice de CPU.

Las clases de ionice solo tienen efecto si el planificador de disco las admite, y la documentación del kernel cita bfq y mq-deadline como planificadores compatibles. El que aparece entre corchetes es el planificador en uso.

cat /sys/block/nvme0n1/queue/scheduler
[none] mq-deadline kyber bfq

El disco NVMe del servidor de prueba usa [none], así que, según la documentación oficial, ionice puede no tener efecto; el efecto no se midió por separado. El nombre del disco se consulta con lsblk.

6️⃣ Dónde usar nice: copias de seguridad · cron · wp-cli

Añade nice a las tareas largas pero sin prisa. La compresión de copias de seguridad usa CPU y disco a la vez, así que se indican nice e ionice juntos.

nice -n 19 ionice -c3 tar czf backup.tgz /home/example

Si una tarea que ya está en marcha ralentiza el servidor, busca su PID en top y súbele el valor con renice; en las tareas cron que se ejecutan a diario, pon nice delante del comando.

0 3 * * * nice -n 10 /usr/local/bin/backup.sh

En un servidor WordPress, si ejecutas tareas grandes de wp-cli como buscar y reemplazar o regenerar imágenes con nice -n 10, cuando la CPU está ocupada la usa primero php-fpm, que atiende las solicitudes de los visitantes.

nice -n 10 wp media regenerate --yes

En cambio, no subas el valor nice de php-fpm ni del propio servidor web. Si los procesos que responden a los visitantes ceden, las páginas tardan más en responder cuando la CPU está ocupada.

🔢 FAQ & contenido recomendado

En los procesos normales, PR en top se muestra como 20 más el valor nice. Un proceso lanzado con nice 5 apareció con PR 25 y NI 5, mientras que la columna PRI de ps se calcula de otra forma y mostró el mismo proceso como 14.

nice suma el valor indicado al valor nice actual. [nice -n 5 nice -n 3 nice] muestra 8, a diferencia de renice -n, que fija el valor indicado.

Si añades [Nice=] en la sección [Service] del archivo de unidad del servicio, se fija el valor nice de los procesos que ejecuta ese servicio. Según la documentación oficial de systemd.exec, admite valores de -20 a 19.

🧭 Procesos y programación de tareas: contenido recomendado 11 artículos · 4 referencias
🗂️ Procesos y programación de tareas
📄 Comando ps 📄 Comando top 📄 Comando nice de Linux 📄 Comando kill 📄 Comando killall 📄 Segundo plano & primer plano 📄 Comando uptime
📄 Configurar crontab
📋 WP CLI: instalación y configuración 📄 WP-Cron(wp-cron.php) 📄 Buscar patrones sincronizados: WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities (documentación del kernel) 📡 sched_prio_to_weight (código del kernel)

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

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

Demuestra que eres humano: 5   +   2   =