Corrigindo a falha "WARNING! Your cache is running out of filedescriptors" - Squid2.7STABLE9 Slackware 12

Há algum tempo tive problemas de desempenho/lentidão nos acessos a internet na empresa onde trabalho. Após analisar, vi que se tratava de uma falha no Squid, que demandava de um limite maior no "filedescriptor" do sistema operacional. Por fim consegui solucionar o problema e resolvi postar aqui um passo a passo de como solucionei tudo.

[ Hits: 36.338 ]

Por: Rafael Bruno de Almeida em 31/08/2010


Introdução



Trabalho em um ambiente onde há um alto índice de acessos à internet, com uma demanda cada vez mais alta, vi que certo dia o desempenho nos acessos a internet cai muito, tais acessos ficaram muito lentos praticamente inviabilizando a navegação.

Iniciei as análises e depois de muito procurar me deparei com o seguinte erro no arquivo de logs do cache (/var/log/squid/cache.log):

"WARNING! Your cache is running out of filedescriptors"

Sem saber do que se tratava iniciei uma busca na web visando solucionar o problema, e depois de muita pesquisa descobri que este erro era proveniente ao limite no tamanho dos descritores de arquivo do sistema operacional que, em uma instalação padrão do Slackware 12 é de 1024 (para verificar o tamanho destes descritores rode o comando "ulimit -n").

NOTA: Uma descrição completa do que vem a ser um "descritor de arquivos" pode ser encontrada em: http://en.wikipedia.org/wiki/File_descriptor - Acesso em <18 AGO 2010>.

Por fim, vi que para solucionar o problema seria necessário aumentar esse limite e que a única forma (pelo menos que eu encontrei, e que efetivamente funcionou) de que isto fosse realizado, seria fazer uma recompilação do meu kernel - versão linux-2.6.21.5.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Recompilando o kernel
   3. Reconfigurando o boot do servidor
   4. Reconfigurando o Squid (finalizando)
Outros artigos deste autor

Implantando o Cacti (gerador de gráficos) em HTTP Seguro (HTTPS)

Backup de roteadores Cisco com o TFTP + Pancho - Slackware 13

Implantando o Nagios em HTTP Seguro (HTTPS)

Leitura recomendada

DansGuardian: Filtrando o acesso a Web

SUSE Linux - Squid autenticando no Active Directory (AD)

Limitando download com Squid

Squid autenticado no Active Directory com Winbind

Projeto Squid

  
Comentários
[1] Comentário enviado por paulopastoriza em 31/08/2010 - 08:53h

O filedescriptors ficam ocupados quando o processo do squid não é encerrado corretamente.
Para liberar os filedescriptors só reiniciando o servidor.

Para aumentar os filedescriptors em tempo de execução:
sysctl -w fs.file-max=64000

Para tornar permanente edite o arquivo /etc/sysctl.conf file, e adicione o parâmetro:
fs.file-max = 64000

Obs: Isto para o CentOS e Ubuntu.

[2] Comentário enviado por rafaelalmeida em 31/08/2010 - 10:07h

Bakana...
Só que eu também tinha tentado algo semelhante.. e.. sem sucesso.. pra falar a verdade no meu server este arquivo /etc/sysctl.conf não existe ou não consegui encontra-lo...
O bakana é que outros usuários podem tentar desta forma e se conseguirem com certeza será bem mais fácil que recompilar tudo.. que alias dá um baita de um trabalhão!! =) De qualquer forma fica o artigo aê para os que não conseguirem... Vlw por contribuir!!

[3] Comentário enviado por ---Anonymous--- em 05/09/2010 - 10:29h

Velho, estou tendo tendo o mesmo problema com o Squid, no começo ele acessava a Net de boa, depois ficou lento a bagaça.
Tentei achar o esse caminho /usr/include/bits/typesizes.h mas o diretorio bits com o tupesizes.h não existe.
Tentei do jeito do PAULO PASTORIZA, man também não consegui.
Infelismente.

[4] Comentário enviado por ton.work em 06/09/2010 - 19:35h

O caminho:
"/usr/src/linux/include/linux/posix_types.h"
"define INR_OPEN 1024"

é o mesmo que,

"/usr/src/linux/include/linux/posix_types.h"
"define __FD_SETSIZE 1024"

mas não encontrei o "define INR_OPEN 16384"

[5] Comentário enviado por rafaelalmeida em 08/09/2010 - 11:19h

Opa,

Na verdade o artigo contem um erro, segue abaixo os arquivos a serem alterados:

vi /usr/include/bits/typesizes.h

DE: #define __FD_SETSIZE 1024

PARA:

#define __FD_SETSIZE 16384

vi /usr/src/linux/include/linux/posix_types.h

DE: #define __FD_SETSIZE 1024

PARA:

#define __FD_SETSIZE 16384

vi /usr/src/linux/include/linux/fs.h

DE: # define INR_OPEN 1024

PARA:

# define INR_OPEN 16384

Repeti o mesmo arquivo para duas trocas, foi um descuido, acima segue os arquivos corretos.

Lembrando: (atenção o "#" deve ser mantido).

[6] Comentário enviado por KnowX em 08/09/2010 - 12:40h

rafaelalmeida, como vai, tudo bem?

Não lembro se este comando funciona no Slackware 12, porém tente e observe o resultado.

Você colocou os FDs em 16384, o comando abaixo aumenta os FDs para 32768 sem a necessidade de recompilação do Kernel, porém não sei se a performance do Servidor é a mesma.

#ulimit -HSn 32768

confira os FDs com o comando:

#ulimit -n

Um abraço a todos.

[7] Comentário enviado por rafaelalmeida em 08/09/2010 - 12:55h

Opa! tudo certo KnowX!

Esse comando funciona sim! porém eu tinha que manter o Putty aberto pra funcionar, se eu fechasse o Putty ele voltava o valor pra 1024.. Daí tivemos de ficar uma semana com o Putty aberto aqui para que o valor não se alterasse novamente, até que fiz as ações citadas no artigo e funcionou legal (até hoje rs.).. No mais obrigado por contribuir!!

[8] Comentário enviado por romalmeida em 06/09/2011 - 09:32h

Prezado Rafael Almeida

Fiz essas alterações que para acertar de 1024 para 16384.

Mas a minha dúvida, eu não tenho que descomentar a linha retirando a #?

Abs,


[9] Comentário enviado por rafaelalmeida em 06/09/2011 - 09:40h

Opa!

Então, quando fiz mantive todos os "comentários" sim, e tudo funcionou desta forma. Valeu!

[10] Comentário enviado por nerdzinbr em 06/06/2016 - 02:43h

E pra quem tem ele instalado no windows server, qual o procedimento ?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts