Básico de nice e renice - Controlando a Prioridade de Processos

Básico de nice e renice - Controlando a Prioridade de Processos

O Que São nice e renice?

nice e renice são comandos Linux para controlar a prioridade de agendamento da CPU de um processo. Processos com maior prioridade recebem mais tempo de CPU do agendador.

Pontos-Chave

  • Quer executar processamento pesado sem impactar outros serviços? -> Use nice para reduzir a prioridade no lançamento
  • Processo em execução consumindo muita CPU? -> Use renice para reduzir a prioridade dinamicamente
  • Usuários comuns só podem reduzir a prioridade -- aumentar requer privilégios root

O Que é um Nice Value?

Um nice value é um inteiro de -20 a 19. Valores menores significam prioridade maior.

Nice Value Prioridade Uso Típico
-20 Mais alta Processamento em tempo real (apenas root)
0 Normal (padrão) Processos típicos
10 Menor Jobs em lote em background
19 Mais baixa Executar apenas quando o sistema estiver ocioso

Apesar do nome, um processo com nice value mais alto (como 19) é mais "gentil" com outros processos -- ele voluntariamente usa menos CPU. Contra-intuitivo, mas essa é a convenção.

nice - Definir Prioridade no Lançamento

Sintaxe

nice -n <nice_value> <comando>

A opção -n especifica quanto ajustar o nice value em relação ao nice value do processo atual. Omitir -n aplica o incremento padrão de +10 (prioridade menor).

Exemplos

# Executar backup com prioridade reduzida (nice=10)
nice -n 10 tar czf /backup/home.tar.gz /home/

# Executar com prioridade minima (nice=19)
nice -n 19 ./long-batch-job.sh

# Omitir flag -n (padrao +10)
nice ./heavy-script.sh

Verificar o nice value atual

nice
0

Executar nice sem argumentos imprime o nice value do shell atual.

renice - Alterar Prioridade de um Processo em Execução

Sintaxe

renice -n <nice_value> -p <PID>
renice -n <nice_value> -u <usuario>
renice -n <nice_value> -g <grupo>

Alterar por PID

# Definir PID 1234 para nice value 15
renice -n 15 -p 1234
1234 (process ID) old priority 0, new priority 15

Alterar todos os processos de um usuário

# Definir todos os processos do usuario "worker" para nice value 10
renice -n 10 -u worker

Combine com pgrep para direcionar um processo pelo nome:

renice -n 19 -p $(pgrep heavy-job)

Como Verificar Nice Values

Usando top

A coluna NI no top mostra o nice value. A coluna PR mostra a prioridade de agendamento calculada pelo kernel (PR = 20 + NI).

top
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 user      30  10  102400  12000   8000 R  15.0   0.2   0:05.23 tar

Usando ps

ps -eo pid,ni,comm
  PID  NI COMMAND
    1   0 systemd
 1234  10 tar
 5678   0 bash

Regras de Permissão

Ajustes de prioridade estão sujeitos às seguintes restrições:

Ação Usuário Comum Root
Reduzir prioridade (aumentar nice value) Sim Sim
Aumentar prioridade (diminuir nice value) Não Sim
Modificar processos de outro usuário Não Sim

Tentar aumentar a prioridade como usuário comum falha:

renice -n -5 -p 1234
renice: failed to set priority for 1234 (process ID): Permission denied

Padrões Práticos

# Executar batch noturno com baixa prioridade para nao impactar servicos
nice -n 15 /opt/scripts/nightly-backup.sh &

# Job em execucao esta muito pesado -- reduzir prioridade sem parar
renice -n 19 -p $(pgrep heavy-job)

# Comprimir arquivo de log grande em background sem atrasar outros trabalhos
nice -n 10 gzip /var/log/large.log &

Evite Estes Erros

  • Aplicar nice -n -20 a um serviço de produção como root -- pode privar outros serviços de CPU
  • Confiar apenas no nice para limitar uso de CPU -- use cgroups ou cpulimit para limites rigidos

Próximas Leituras