Squid caindo devido ao erro "WARNING! Your cache is running out of filedescriptors"

Publicado por Welisson em 05/10/2007

[ Hits: 19.137 ]

 


Squid caindo devido ao erro "WARNING! Your cache is running out of filedescriptors"



Pra quem está sofrendo com esse erro "WARNING! Your cache is running out of filedescriptors", que acaba travando a navegação em alguns momentos, deixando todo mundo louco sem saber o que pode ser, de imediato.

Bom, esse erro ocorre por que o Squid está trabalhando no limite de arquivos abertos. Situação quando essa que pode provocar travamentos diversos na navegação, ou seja, o Squid começa a ficar lento até chegar uma hora que o mesmo acaba travando, conseqüentemente seu cache.log se enche dessas mensagem:

WARNING! Your cache is running out of filedescriptors

Pra contornar isso você acaba reiniciando o serviço do Squid e tudo volta a ser como era antes, correto, isso pode até ajudar provisoriamente, até você ter um certo numero de usuários e seu Squid ter que trabalhar mais, então ele começa a dar esse problema constantemente.

O que eu vou explicar aqui eu fiz e funcionou em cima do Debian e de Conectiva, e aumentou até mesmo o desempenho do meu Squid em relação a abertura de paginas.

Antes de mais nada é preciso do source do teu kernel, pois a configuração envolve a recompilação do mesmo.

Vi na internet vários artigos para se alterar os seguintes arquivos:

/usr/include/bits/typesizes.h:

#define __FD_SETSIZE            16384

ou

/usr/include/bits/type.h

Digitando no shell "ulimit -Hsn 16384" e depois subir o squid com o comando "ulimit -HSn 16384" no script de inicialização dele. Infelizmente aqui não deu certo, pois sempre que saia do shell e reconectava ele voltava a 1024 ou se reinicia-se o servidor ele também voltava a 1024.

A minha solução então foi recompilar o kernel mesmo.

Então a primeira coisa depois de você estar com seu source em mãos é alterar os seguintes arquivos, com seu editor de favorito, no meu caso usei o vi.

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

#define __FD_SETSIZE            16384

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

#define INR_OPEN   16384

Após deixar as linhas como as de cima digite no shell:

# ulimit -HSn 16384

Então recompile o seu kernel com o comando:

# make
# make modules
# make modules_install
# make install


Agora é só conferir se ele adicionou a imagem do kernel no /boot, e edite o grub com as entrada do seu kernel, caso seja necessário.

Feito isso reinicie a maquina. Após o boot confirme qual o FD padrão com o comando "ulimit -HSa" e veja se ele retorna 16384.

Próximo passo é recompilar o Squid. No meu caso usei a última versão 2.6.STABLE16-20070910, com as suas preferência, mas não esquecendo de setar o valor do FD.

Não darei explicação de como configurar o squid, partindo do princípio que você sabe como configurar o mesmo.

Linha de comando para compilar o squid:

# ./configure --sysconfdir=/etc/squid --enable-storeio=aufs,coss,diskd,ufs --enable-poll --enable-delay-pools --enable-linux-netfilter --enable-htcp --enable-carp --with-pthreads --enable-underscores --enable-external --enable-arp-acl --with-maxfd=16384
# make
# make install


OBS: --with-maxfd é onde você vai setar o tamanho do seu FD, no nosso caso 16384.

Após instalar o squid é só iniciar o mesmo e você verá que ele estará rodando em 16384.

Para confirmar a versão do squid digite squid -v se aparecer a versão antiga, digite which squid ele vai mostrar o caminho do mesmo, aí é só usar o cp:

# cp /usr/local/squid/sbin/squid /patch/do/squid/antigo

Bom pessoal, é isso aí.

Qualquer alteração ou publicação em outro site, por favor me avise através do e-mail antes de qualquer publicação.

Caso sofra alteração só me comunique.

suportelinux at itelefonica dot com dot br

Welisson Tomé
Administrador de Redes Windows e Linux.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Como descobrir a versão (ou release) do seu Ubuntu Linux

Backup de arquivos na Cloud com AWS Amazon S3 e PHP

Você conhece o NetbootCD?

Instalação do VMWare Server no Debian 5

O arquivo /etc/issue

  

Comentários
[1] Comentário enviado por vasectomia em 07/10/2007 - 14:50h

Muito boa a dica mas resolvi meu problema apenas liberando saida para loopback no meu firewall.

[2] Comentário enviado por marcellobm em 16/10/2007 - 23:04h

Muito bom mesmo teu artigo. Resolveu um problema que estava enfrentando tem algum tempo.
Mas gostaria de tirar mais uma dúvida, esse número de open files, qual o parâmetro que você utilizou para saber se esse é o máximo? Isso varia com o Hardware que você tem? (um P-III e um Quad-core).

E mais uma vez, meus parabéns.

[3] Comentário enviado por linuxkids em 16/11/2007 - 17:00h

File Descriptors, é a quantidade maxima que o squid pode estar abrindo, geralmente ele vem com 1024, por padrão, se vc tiver uma rede com poucos usuarios isso não faz a menor diferença, mas se tiver uma rede com mais de 200 usuarios pendurados, é bom vc implementar isso, pois melhora bastante na performance do seu squid, em relação a sua maquina, também e a navegação dos seus usuarios.

[4] Comentário enviado por JØK3® em 23/11/2007 - 13:26h

galera, aki ta acontecendo exatamente isso!!!!
o squid cai toda hora e quando reinicio vola ao normal a internet

tenho o conectiva 8 squid 2.4 e nao tem a pasta bits no /usr/include/
o que eu faço???

[5] Comentário enviado por JØK3® em 23/11/2007 - 16:59h

ops como nao posso editar postei novamente

outra pasta que nao tem é a pasta linux neste caminho
/usr/src/linux/include/linux/posix_types.h
como crio este arquivo???

[6] Comentário enviado por linuxkids em 30/01/2008 - 17:43h

esse arquivo ele tem no source do teu kernel.

[7] Comentário enviado por eatti em 03/07/2008 - 18:00h

Srs, surigo uma alternativa para resolver isso

Abra o arquivo /etc/security/limits.conf e inclua a linha exatamente como está abaixo

- nofile 16384

Edite o squid.conf e adicione as linhas

half_closed_clients off
server_persistent_connections off
client_persistent_connections off

É uma alternativa a recompilar o kernel.. até agora funcionou..

Abraços,
Everton

[8] Comentário enviado por removido em 29/07/2008 - 22:29h

Boa noite,

Pessoal,

Tirando a parte de compilar o Kernel e o Squid, fiz todos os outros procedimentos e ainda continua lento, muito lento. Realmente antes aparecia a mensagem: "WARNING! Your cache is running out of filedescriptors", porém após mudar o tamanho máximo do filedescriptors para 4096 no arquivo /etc/default/squid parou de aparecer a mensagem.

----------------------
debian:~# cat /etc/default/squid
#
# /etc/default/squid Configuration settings for the Squid proxy server.
#

# Max. number of filedescriptors to use. You can increase this on a busy
# cache to a maximum of (currently) 4096 filedescriptors. Default is 1024.
SQUID_MAXFD=4096

---------------------------------------------

e quando rodo o Squid com o comando "# squid -d 8" consigo ver que 4096 file descriptors estão disponíveis:

--------------------------------------------
debian:~# squid -d 9
debian:~# 2008/07/29 16:13:43| Starting Squid Cache
2008/07/29 16:13:43| Process ID 2671
2008/07/29 16:13:43| With 4096 file descriptors available
....

--------------------------------------------

Observações:

Squid Cache: Version 2.6.STABLE (STABLE alguma coisa, não lembro a versão)
O server tem 16 GB de RAM;
1 Tera de HD SCSI em RAID 5;
Processador Xeon...
Verifiquei antes de colocar a linha "half_closed_clients off" que havia pelo menos 3100 conexões estabelecidas e umas 7000 ao total, após colocar "half_closed_clients off" ficou na faixa de 1200 estabelecidas e umas 3000 ao total. O pior é que com o Debug habilitado não aparece nada de anormal, é como se tudo estivesse configurado OK... poderia pelo menos aparecer algum tipo de erro... ficaria um pouco melhor para descobrir o problema.

P.S.: se eu tentar sair direto para Internet o acesso é muito bom.

[9] Comentário enviado por nunesdutra em 17/06/2009 - 16:33h

Bom tive o mesmo problema... Fiz varios testes.... Aumentei o default/squid para 4096, removi o Squid e reinstalei e nada funcionou...

Ai de repente, estava monitorando os erros do Squid e vi que havia um acesso imenso vindo de um IP da rede, ou seja, VÍRUS NA REDE!!!

Culpa do Rwuindows!!!

[10] Comentário enviado por weslly21 em 02/07/2009 - 17:45h

Amigo vc nao precisava recopilar

o que acontece eh o seguinte

o comando ulimte deve ser colocado com o squid parado , e quando vc reinicia o pc ele volta
a ficar como antes com 1024

vc deve fazer o seguinte

quando reinicia o pc o comando ulimit deve ser iniciado antes do squid

mais como fazer isso ?

simples


kkk ( nao to lembrando bem o caminho do arquivo ) mais eh o .profile ( procura ele assim, digita updatedb e depois locate .profile)

vc abre ele e joga o comando ulimt dentro ele


[11] Comentário enviado por vinicius.almeida em 31/08/2010 - 20:04h

artigo , muito bom..
Obrigado.

[12] Comentário enviado por vinicius.almeida em 23/09/2010 - 10:15h

Tem que compilar sim, o arquivo .profile nao resolve.

[13] Comentário enviado por helderam em 09/04/2014 - 15:20h

Estamos com este problema. Parece que ajustando o ulimit resolveu... Em fase de teste.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts