Pesquisa de site

Como definir a prioridade do processo Linux usando comandos agradáveis e renice


Neste artigo, explicaremos brevemente o agendador do kernel (também conhecido como agendador de processos) e a prioridade do processo, que são tópicos além o escopo deste guia. A seguir vamos nos aprofundar um pouco no gerenciamento de processos Linux: veja como executar um programa ou comando com prioridade modificada e também alterar a prioridade de execução de processos Linux.

Leia também: Como monitorar processos do Linux e definir limites de processos por usuário

Compreendendo o Agendador do Kernel Linux

Um agendador de kernel é uma unidade do kernel que determina o processo mais adequado dentre todos os processos executáveis para execução a seguir; ele aloca o tempo do processador entre os processos executáveis em um sistema. Um processo executável é aquele que aguarda apenas o tempo da CPU, está pronto para ser executado.

O agendador constitui o núcleo da multitarefa no Linux, usando um algoritmo de agendamento baseado em prioridade para escolher entre os processos executáveis no sistema. Ele classifica os processos com base nos mais merecedores e também na necessidade de tempo de CPU.

Compreendendo a prioridade do processo e o bom valor

O kernel armazena uma grande quantidade de informações sobre processos, incluindo prioridade de processo, que é simplesmente a prioridade de agendamento anexada a um processo. Os processos com prioridade mais alta serão executados antes daqueles com prioridade mais baixa, enquanto os processos com a mesma prioridade serão agendados um após o outro, repetidamente.

Há um total de 140 prioridades e dois intervalos de prioridade distintos implementados no Linux. O primeiro é um valor agradável (niceness) que varia de -20 (valor de maior prioridade) a 19 (valor de menor prioridade) e o o padrão é 0, é isso que descobriremos neste guia. A outra é a prioridade em tempo real, que varia de 1 a 99 por padrão, depois de 100 a 139 destinam-se ao espaço do usuário.

Uma característica importante do Linux é o escalonamento dinâmico baseado em prioridade, que permite que o bom valor dos processos seja alterado (aumentado ou diminuído) dependendo de suas necessidades, como veremos mais adiante.

Como verificar o bom valor dos processos Linux

Para ver os bons valores dos processos, podemos usar utilitários como ps, top ou htop.

Para visualizar o valor legal dos processos com o comando ps no formato definido pelo usuário (aqui o NI a coluna mostra a gentileza dos processos).

ps -eo pid,ppid,ni,comm

Alternativamente, você pode usar os utilitários top ou htop para visualizar os bons valores dos processos do Linux, conforme mostrado.

top
htop

Diferença entre PR ou PRI e NI

Nas saídas top e htop acima, você notará que há uma coluna chamada PR e PRI receptivamente que mostra a prioridade de um processo.

Isto, portanto, significa que:

  • NI – é o valor legal, que é um conceito de espaço do usuário, enquanto
  • PR ou PRI – é a prioridade real do processo, conforme visto pelo kernel Linux.
Como calcular valores PR ou PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Faixa de valores agradável (NI): -20 a 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Mas se você vir um rt em vez de um número, como mostrado na imagem abaixo, isso basicamente significa que o processo está sendo executado com prioridade de agendamento em tempo real.

Como executar um comando com um determinado valor interessante no Linux

Aqui, veremos como priorizar o uso da CPU de um programa ou comando. Se você tem um programa ou tarefa que consome muita CPU, mas também entende que pode levar muito tempo para ser concluído, você pode definir uma prioridade alta ou favorável para ele usando o comando nice.

A sintaxe é a seguinte:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

Importante:

  • Se nenhum valor for fornecido, nice define uma prioridade de 10 por padrão.
  • Um comando ou programa executado sem Nice tem como padrão uma prioridade zero.
  • Somente root pode executar um comando ou programa com prioridade aumentada ou alta.
  • Usuários normais só podem executar um comando ou programa com baixa prioridade.

Por exemplo, em vez de iniciar um programa ou comando com a prioridade padrão, você pode iniciá-lo com uma prioridade específica usando o seguinte comando legal.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

Você também pode usar o terceiro método, que é um pouco confuso, especialmente para valores negativos de gentileza.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Alterar a prioridade de agendamento de um processo no Linux

Como mencionamos antes, o Linux permite agendamento dinâmico baseado em prioridade. Portanto, se um programa já estiver em execução, você poderá alterar sua prioridade com o comando renice desta forma:

renice -n  -12  -p 1055
renice -n -2  -u apache

No exemplo de saída top abaixo, a gentileza do teamspe+ com PID 1055 agora é -12 e para todos processos pertencentes ao usuário apache é -2.

Ainda usando esta saída, você pode ver que a fórmula PR=20 + NI significa,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Quaisquer alterações feitas com o comando renice nos valores legais dos processos de um usuário serão aplicáveis apenas até a próxima reinicialização. Para definir valores padrão permanentes, leia a próxima seção.

Como definir um bom valor padrão dos processos de um usuário específico

Você pode definir o valor padrão de um usuário ou grupo específico no arquivo /etc/security/limits.conf. Sua principal função é definir os limites de recursos para os usuários logados via PAM.

A sintaxe para definir um limite para um usuário é a seguinte (e os valores possíveis das diversas colunas são explicados no arquivo):

#<domain>   <type>  <item>  <value>

Agora use a sintaxe abaixo onde hard – significa impor links físicos e soft significa – impor os limites flexíveis.

<username>  <hard|soft>  priority  <nice value>

Alternativamente, crie um arquivo em /etc/security/limits.d/ que substitui as configurações do arquivo principal acima, e esses arquivos são lidos em ordem alfabética.

Comece criando o arquivo /etc/security/limits.d/tecmint-priority.conf para o usuário tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

Em seguida, adicione esta configuração nele:

tecmint  hard  priority  10

Salve e feche o arquivo. A partir de agora, qualquer processo de propriedade da tecmint terá um valor bacana de 10 e PR de 30.

Para obter mais informações, leia as páginas de manual de nice e renice:

man nice
man renice 

Você também pode gostar de ler os artigos a seguir sobre gerenciamento de processos Linux.

  1. Como encontrar e eliminar processos em execução no Linux
  2. Um guia para comandos Kill, Pkill e Killall para encerrar um processo no Linux
  3. Como monitorar o uso do sistema, interrupções e solucionar problemas de servidores Linux
  4. CPUTool – Limite e controle a utilização da CPU de qualquer processo no Linux

Neste artigo, explicamos brevemente o agendador do kernel, a prioridade do processo, vimos como executar um programa ou comando com prioridade modificada e também alterar a prioridade dos processos ativos do Linux. Você pode compartilhar suas idéias sobre este tópico por meio do formulário de feedback abaixo.