sexta-feira, 18 de outubro de 2013

Servidor lento mas cpu memoria disco e swap estão sem problemas



*Esse post se refere ao sistema operacional Centos. Porém, sua ideia pode ser aplicado a todo SO que faz esse mesmo tipo de limitação.


==Sintomas== 

- Você possui um servidor rodando um serviço muito importante para sua empresa (ex.: página web da empresa).
- Você percebe que o servidor está lento, tanto para abrir as páginas, quanto para conectar remotamente via ssh entre outras tarefas. E essa lentidão aparece e some com alguma frequência.
- Você verifica o uso de CPU, memória RAM e disco disponível, uso de SWAP, quantidade de processos web rodando, etc... e percebe que está tudo funcionando na mais perfeita ordem.


==Causa== 

Muito provavelmente seu servidor está precisando de um incremento no limite de arquivos abertos por usuário/processo (como a maioria dos processos executam com usuário expecífico podemos dizer por processo).
O Centos limita a quantidade de arquivos que um usuário pode abrir por questões de segurança, pois, um script malicioso pode abrir arquivos indefinidamente.
Por padrão é pertido a abertura de 1024 arquivos. Caso esse limite tenha sido atingido e um processo necessite abrir um arquivo novo, essa ação ficará em espera até que seja liberada uma "vaga" de abertura de arquivos.
Essa espera é o que resulta na lentidão "sem explicação".


==Solução== 

Aumente o limite de arquivos abertos por usuário:
- Utilize o comando abaixo para ver a situação atual de seu servidor (veja o campo "open files").
 ulimit -a 

- Edite o arquivo "/etc/security/limits.conf" e altere as seguintes linhas:
 .
 .
 .
 #* soft core 0
 #* hard rss 10000
 .
 .
 .

 - Altere para:
 .
 .
 .
 * soft nofile 16384
 * hard nofile 16384
 .
 .
 .
Onde 16384 será o novo limite de arquivos aberto por usuário. Escolha o número de acordo com sua necessidade e recursos de seu servidor. Quanto maior o número, mais memória será consumida.

- As alterações serão efetivadas a medida que os serviços forem reiniciados, sugiro reiniciar a máquina inteira pois achar os serviços que estão em espera não será muito fácil.
 reboot

- Execute novamente o comando "ulimit -a" e veja as novas configurações.