Basico de nice e renice - Controlando a Prioridade de Processos

Basico de nice e renice - Controlando a Prioridade de Processos

O Que Sao nice e renice?

nice e renice sao 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 servicos? -> Use nice para reduzir a prioridade no lancamento
  • Processo em execucao consumindo muita CPU? -> Use renice para reduzir a prioridade dinamicamente
  • Usuarios comuns so podem reduzir a prioridade -- aumentar requer privilegios root

O Que e um Nice Value?

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

Nice Value Prioridade Uso Tipico
-20 Mais alta Processamento em tempo real (apenas root)
0 Normal (padrao) Processos tipicos
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) e mais "gentil" com outros processos -- ele voluntariamente usa menos CPU. Contra-intuitivo, mas essa e a convencao.

nice - Definir Prioridade no Lancamento

Sintaxe

nice -n <nice_value> <comando>

A opcao -n especifica quanto ajustar o nice value em relacao ao nice value do processo atual. Omitir -n aplica o incremento padrao 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 Execucao

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 usuario

# 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 Permissao

Ajustes de prioridade estao sujeitos as seguintes restricoes:

Acao Usuario Comum Root
Reduzir prioridade (aumentar nice value) Sim Sim
Aumentar prioridade (diminuir nice value) Nao Sim
Modificar processos de outro usuario Nao Sim

Tentar aumentar a prioridade como usuario comum falha:

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

Padroes Praticos

# 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 servico de producao como root -- pode privar outros servicos de CPU
  • Confiar apenas no nice para limitar uso de CPU -- use cgroups ou cpulimit para limites rigidos

Proximas Leituras