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
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'