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.