Linux > Gerenciando prioridades de processos com Nice, Renice e IOnice

3076 Views
Tempo de leitura: 3 Minutos 
Atualizado em:

O que é prioridade? Prioridade é uma medida de privilégio que algo ou alguém possui. Todo processo no Linux possui prioridades de CPU, Memória e Disco. Alguns possuem mais prioridades do que outros, ou seja, mais ou menos privilégios no consumo desses recursos.

<

p align=”justify”>Apesar do sistema determinar a prioridade padrão de cada processo, podemos especificar a quais processos queremos aplicar mais ou menos privilégios. Para isso, usamos os comandos nice, renice e ionice.

Saber como e quando utilizá-los é o “segredo de Tostines”. Veremos, a seguir, quando e como utilizar cada um deles. Vem comigo que você passa de ano.

Conceituando a syntax de nice e renice

Antes de começarmos, é interessante entendermos um conceito: O termo “nice” em inglês significa “legal“. Um processo “legal” para a CPU é aquele que não demanda maior prioridade.

A syntax dos comandos nice e renice são acompanhadas por números que vão de -20 à +20, onde “-20” significa menos legal, e “+20” significa “mais legal“. Um processo -20 tem maior prioridade, por isso é menos legal. Já o +20 é bem legal, e por isso tem menos prioridade.

Ou seja, aqui o bonzinho só se ferra.

Comando “nice”:

O comando nice nos permite especificar a prioridade de CPU e Memória com a qual um processo será iniciado. Ou seja, o processo iniciará com a prioridade que especificarmos e manterá essa prioridade até que seja finalizado.

O comando para isso seria:

nice prioridade comando

Exemplo:

nice -10 rm -f /tmp/*

Desta forma, o comando rm -f será executado com prioridade “-10“. O limite é -20.

Comando “renice”:

O comando renice é similar ao nice. A diferença entre eles é que o renice é utilizado em processos que já estão em execução.

A syntax dele é esta:

renice -10 -p PID

Exemplo:

renice -10 -p 25876

Desta forma, o processo cujo PID é 25876 passará para prioridade “-10“.

Observe que é preciso ter o número do PID para trocarmos a prioridade do processo.

Caso queiramos trocar a prioridade dos processos de um determinado usuário, podemos utilizar o parâmetro “-u” e especificarmos esse usuário. Exemplo:

renice -10 -u usuario

Com isso, todos processos desse usuário passarão para prioridade “-10“.

Comando “ionice”:

O comando ionice atribui maior ou menor prioridade na leitura e escrita no disco. Ou seja, diferentemente de nice e renice, que trabalham com prioridade sobre CPU e Memória, o comando ionice trabalha com prioridade de leitura e escrita no disco.

A syntax do comando é esta:

ionice -C prioridade -p PID

As possíveis prioridades são:

    -c 3 = Iddle = Só executa se houver recurso livre;
    -c 2 = Best-Enffort = Executa sem consumir muito recurso;
    -c 1 = Real Time = Executa com prioridade máxima.

Exemplo:

  • Determinando menor prioridade de disco para um processo:
  • ionice -c 3 -p 25876
  • Determinando prioridade média de disco para um processo:
  • ionice -c 2 -p 25876<
  • Determinando prioridade máxima de disco para um processo:
  • ionice -c 1 -p 25876

    Exemplo de uso

    Vou dar um exemplo de um case que usei apenas esses três comandos para solucionar um problema crítico de migração: O e-commerce de um cliente possuía dezenas de GB de dados e precisava ser migrado. Porém, a migração concorria com o consumo de CPU, Memória e Disco do servidor, deixando o site impraticavelmente lento.

    Combinei o jogo com o cliente e migrei os dados usando rsync com a seguinte prioridade:

    08hrs as 18hrs renice +19 e ionice -c3
    18hrs as 00hrs renice +0 e ionice -c2
    00hrs as 08hrs renice -19 e ionice -c1

    A mudança de prioridade foi feita com um comando single-line que concatenava ps aux para pegar os PIDs do rsync e um laço com for ou while, não lembro agora, agendado no Crontab do sistema.

    A migração “impossível” foi realizada em alguns dias sem afetar a performance do site do cliente.

    Conclusão

    Como dito anteriormente, o Linux gerencia a prioridade de processos da forma como ele, Linux, considera ser melhor para o sistema. Acontece que, as vezes, o melhor para o sistema não é melhor para nós, então a troca da prioridade de um processo se faz necessária. Com esses 3 comandos, como vimos anteriormente, podará gerenciar prioridades como bem entender. Só tome cuidado para não gerar sobrecargas desnecessárias.

    Gostou do conteúdo?

    Assine nossa Newsletter e/ou feed RSS no menu lateral direito para receber materiais como este desenvolvidos por nós mesmos.

    4 - 0

    Thank You For Your Vote!

    Sorry You have Already Voted!