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
nicepara reduzir a prioridade no lançamento - Processo em execução consumindo muita CPU? -> Use
renicepara 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 -20a 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
cgroupsoucpulimitpara limites rigidos