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
nicepara reduzir a prioridade no lancamento - Processo em execucao consumindo muita CPU? -> Use
renicepara 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 -20a um servico de producao como root -- pode privar outros servicos de CPU - Confiar apenas no nice para limitar uso de CPU -- use
cgroupsoucpulimitpara limites rigidos