Linux Tunning : Open Processes

Neste post será apresentado como configurar o número de processos aberto no sistema operacional caso um serviço específico utilize muitos processos no servidor.

Por padrão nas distribuições Linux o valor que temos de números de processos abertos são de 1024.

Para alterarmos os valores dentro do SO devemos configurar o arquivo /etc/security/limits.conf , onde podemos definir as configurações abaixo :

core – limita o tamanho do arquivo core (KB)
data – tamanho máximo de dados (KB)
fsize – Tamanho máximo de arquivo (KB)
memlock – Espaço máximo de endereços bloqueados na memória (KB)
nofile – Número máximo de arquivos abertos
rss – Tamanho máximo dos programas residentes (KB)
stack – Tamanho máximo de pilha (KB)
cpu – Tempo máximo usado na CPU (MIN)
nproc – Número máximo de processos
as – Limite de espaço de endereços
maxlogins – Número máximo de logins deste usuário
priority – Prioridade que os programas deste usuário serão executados

Em nossos exemplos usaremos nofile e o nproc para ajustar por exemplo um servidor de aplicação ter um melhor desempenho.

No blog foi escrito no passado um post parecido sobre ao ambiente JAVA falando sobre o erro Out of memory : Unable to create threads.

Java : Lado do SO ‘ Out of memory : unable to create new native thread’

Para ajustarmos o parâmetro de abertura de processos no SO devemos primeiro verificar o valor total suportado no Kernel .

cat /proc/sys/fs/file-max

file-max

E seguiremos editando os valores abaixo no /etc/security/limits.conf

No exemplo do limits.conf utilizamos

...
appuser soft     nproc           131072
appuser hard     nproc           131072
appuser soft     core            131072
appuser hard     core            131072
...

SOFT – É como se fosse um alarme para o SO
HARD – É o verdadeiro limite no SO

Com o exemplo acima será garantido que um servidor de aplicação consiga utilizar acima de 1024 processos no servidor e também garantirá que ele não crashe caso ultrapasse 1024 processos abertos no SO.

Caso o servidor tenha recursos para suportar um número maior que o valor do parâmetro do arquivo /proc/sys/fs/file-max podemos aumentar este parâmetro via sysctl.

Adicione a opção fs.file-max /etc/sysctl.conf

fs.file-max = 100000

Habilite a nova opção

sysctl -p 

Para testarmos o ambiente que está precisando de tunning em processos abertos podemos monitorar o servidor com o script :

Coloque na variável appuser  o nome do usuário que precisa ser acompanhado

appuser=usuario
threads=" `ps h -Led -o user | sort | uniq -c | sort -n | grep $appuser | awk '{print $1}'`"
processo="`pgrep -fl $appuser| head -n1 | awk '{print $1}'`"


echo $"Numeros de threads criadas pelo $appuser -->  `echo $threads`"
echo ""
echo ""
echo $"Processo que o $appuser esta usando -->  `echo $processo`"
echo ""
echo ""
echo "Valor do usuario $appuser em  /etc/security/limits.conf"
runuser -l $appuser -c 'ulimit -a'