Comando nice do Linux: definir prioridade, mudar com renice e medir a fatia de CPU na disputa

O comando nice do Linux define o valor nice de um programa (-20 a 19), que decide quanto de CPU ele cede a outros processos ao rodar. Medições num servidor AlmaLinux 9, com duas tarefas presas a um único núcleo de CPU e o valor nice trocado a cada rodada, mostraram que a CPU só foi dividida quando as tarefas disputavam por ela, e a tarefa com nice 19 usou só 1,4%.
Processos já em execução são alterados com o renice, e o ionice cuida de ceder a vez no disco. Para os três comandos, a saída mostrada é exatamente a que apareceu ao rodar como root e como usuário comum.
1️⃣ Comando nice do Linux: faixa de valores e a fatia de CPU na disputa
O valor nice é um número que define quanto um processo cede quando o tempo de CPU é dividido, e pode ir de -20 a 19. Os programas rodam normalmente em 0; -20 é atendido primeiro e 19 é o que mais cede.
É fácil achar que um número maior é atendido primeiro, mas o valor nice funciona ao contrário. O escalonador do Linux dá um peso a cada valor nice e divide o tempo de CPU nessa proporção: nice 0 é 1024, 10 é 110 e 19 é 15.
Ceder a vez só acontece quando as tarefas disputam a CPU. Se houver uma CPU ociosa, até uma tarefa com nice 19 roda sem esperar. É como o assento preferencial no ônibus: livre, qualquer um senta; só se cede o lugar quando o ônibus está cheio.
A tabela de pesos é o array [sched_prio_to_weight] no código-fonte do kernel Linux [kernel/sched/core.c], e foi feita para que cada passo a mais no valor nice corte o tempo de CPU em cerca de 10%.
2️⃣ Uso básico do nice: +10 quando o número é omitido, e valores fora da faixa
Coloque um comando depois do nice e ele roda com o valor nice alterado; digite só nice e ele mostra o valor nice do shell atual.
nice0Nos exemplos abaixo, o bash iniciado mostra o próprio valor nice com [ps -o ni=]. Sem -n, 10 é somado ao valor atual; com -n 5, soma-se 5.
nice bash -c 'ps -o ni= -p $$' 10nice -n 5 bash -c 'ps -o ni= -p $$' 5Valores fora da faixa são ajustados ao limite sem erro, então -n 50 roda em 19.
nice -n 50 bash -c 'ps -o ni= -p $$' 19Só o root consegue adiantar um processo com valor negativo. Um usuário comum recebe o aviso [cannot set niceness], e o comando roda mesmo assim em nice 0.
# como usuário comum
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 $$' -5Os processos filhos iniciados por um comando rodado com nice também rodam com o mesmo valor nice.
nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!' 7Então, se você rodar um script com nice, todo comando dentro dele também cede a vez.
3️⃣ renice: mudar o valor nice de um processo em execução
O nice só define o valor ao iniciar, então para um processo já em execução usa-se o renice. Antes, confira o PID e o valor atual na coluna NI do top ou com ps.
ps -o pid,ni,cmd -p 201643 PID NI CMD
201643 5 sleep 600renice -n 10 -p 201643201643 (process ID) old priority 5, new priority 10Como mostra a saída, o renice -n não soma ao valor atual, e sim define o valor indicado: o resultado é 10, e não 5 + 10 = 15. Não é como apertar ▲ no controle do ar-condicionado para subir um nível, e sim como definir a temperatura desejada em 24 graus.
A documentação oficial do util-linux também descreve o -n como valor absoluto; somar fica a cargo da opção [--relative] nas versões mais novas. O util-linux 2.37.4, a versão testada, não tinha essa opção.
Um usuário comum só consegue aumentar o valor dos próprios processos e não pode baixá-lo de novo depois de aumentar.
# como usuário comum
renice -n 10 -p 201649201649 (process ID) old priority 0, new priority 10renice -n 5 -p 201649renice: failed to set priority for 201649 (process ID): Permission deniedO root também consegue baixar; no mesmo teste, mudou 10 direto para 3.
🔲 Simulador de nice · renice
No simulador abaixo, conectado como usuário comum, você pode digitar nice e renice e ver o valor nice mudar.
4️⃣ Medindo a fatia de CPU na disputa: nice 0 vs 0·10·19
Aumentar o valor nice nem sempre deixa a tarefa mais lenta. A fatia dela só diminui quando disputa a mesma CPU com outra tarefa.
Duas tarefas foram presas a um único núcleo de CPU (taskset), e o script abaixo, que conta de um em um por 5 segundos, rodou nas duas ao mesmo tempo. Quanto maior a contagem, mais tempo de CPU a tarefa usou.
#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $nO script soma 1 ao n até passarem 5 segundos e então mostra o valor final.
Duas tarefas nice 0 dividiram ao meio, enquanto o nice 10 usou cerca de 10% e o nice 19 só 1,4%. Isso bate com as proporções calculadas pelos pesos do kernel (1024 : 110 dá 90,3 : 9,7, e 1024 : 15 dá 98,6 : 1,4).
Rodando sozinha no mesmo núcleo, a tarefa com nice 19 contou cerca de 650.000 a 1.140.000 vezes em 5 segundos. Sem ninguém a quem ceder, até o nice 19 usa a CPU por completo; a carga do servidor (load average) ficou entre 3 e 5 durante o teste.
5️⃣ ionice: ceder a vez no I/O de disco e verificar o escalonador
O nice só decide a fatia de CPU, então em tarefas que leem e gravam no disco por muito tempo, como backups, use o ionice para ceder a vez no disco também. Rodando com -c3 (idle), a tarefa só é atendida quando nenhum outro programa usa o disco.
ionice -c3 bash -c 'ionice -p $$'idleionice -p $$none: prio 0Um processo sem classe definida aparece como [none]; pela documentação do kernel, ele é tratado como best-effort, com a prioridade calculada a partir do valor nice da CPU.
As classes do ionice só fazem efeito quando o escalonador de disco as suporta, e a documentação do kernel cita bfq e mq-deadline como escalonadores compatíveis. O que aparece entre colchetes é o escalonador em uso agora.
cat /sys/block/nvme0n1/queue/scheduler[none] mq-deadline kyber bfqO disco NVMe do servidor de teste usa [none], então, pela documentação oficial, o ionice pode não ter efeito ali; o efeito não foi medido à parte. Confira o nome do disco com lsblk.
6️⃣ Onde usar o nice: backups · cron · wp-cli
Ponha nice em tarefas demoradas mas não urgentes. A compressão de backup usa CPU e disco, então defina nice e ionice juntos.
nice -n 19 ionice -c3 tar czf backup.tgz /home/exampleSe uma tarefa já em execução deixa o servidor lento, ache o PID no top e aumente o valor com renice; em tarefas do cron que rodam todo dia, ponha nice antes do comando.
0 3 * * * nice -n 10 /usr/local/bin/backup.shNum servidor WordPress, se você rodar tarefas grandes do wp-cli, como search-replace ou regeneração de imagens, com nice -n 10, o php-fpm, que atende os visitantes, fica com a CPU primeiro quando ela está ocupada.
nice -n 10 wp media regenerate --yesPor outro lado, não aumente o valor nice do php-fpm nem do próprio servidor web. Se os processos que respondem aos visitantes cederem a vez, as páginas respondem mais devagar quando a CPU está ocupada.
🔢 FAQ & conteúdo recomendado









ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.
