Demoncyber's Weblog

Demoncyber's Weblog

Sobre squid e descritores de arquivos e seus limites

with one comment

Outro dia tive um problema onde o arquivo de log do cache do squid ( cache.log ) estava apresentando a seguinte mensangem.

“WARNING! Your cache is running out of filedescriptors”

O.o logo pensei bom é só aumentar o número de descritores de arquivos que o squid precisa. Certo blza tratei de procurar sobre e encontrei um ótimo link [1] falando sobre o assunto, mas antes de falar sobre a solução uma breve abordagem sobre descritor de arquivos.

“De forma geral, um descritor de arquivo é um índice para um registro de uma estrutura de dados do núcleo que contém detalhes de todos os arquivos abertos. Em POSIX tal estrutura de dado é chamada tabela do descritor de arquivo, e cada processo possui sua própria tabela. Uma aplicação passa o descritor de arquivo para o núcleo através duma chamada de sistema, e o kernel acessa o arquivo representando a aplicação, baseado no descritor. A aplicação não pode manipular a tabela do descritor de arquivo diretamente.” – Wikipedia sobre Descritor de arquivos

Nas minhas palavras X) , índice(endereço) dos arquivos abertos por um processo. Somente para constar o termo refente em ambientes windows é handle.

Pronto consiente sobre isto, agora vamos analizar os motivos pelo qual um programa como o squid pode estourar este limite.

1 – Como o squid pode atender várias requisições de autenticação, várias requisições de sockets dos N usuarios isto pode acarretar e um grande número de abertura de descritores de arquivos. Vejamos por exemplo uma página como a do terra, essa tem muitas imagens, cada imagem de cada link é aberto um descritor de arquivo para guardar o cache da informação ou mesmo obter as informações.

Mas como posso pegar informações sobre as configurações de utilização dos descritores de arquivos do squid?

R: squidclient, assim como não só dados sobre os descritores de arquivos

Exemplo:
squidclient mgr:info | grep -A 8 "File descriptor usage for squid"

* Mostrará os dados sobre os descritores de arquivos do seu squid

File descriptor usage for squid:
Maximum number of file descriptors: 1024
Largest file desc currently in use: 14
Number of file desc currently in use: 11
Files queued for open: 0
Available number of file descriptors: 1013
Reserved number of file descriptors: 100
Store Disk files open: 0
IO loop method: epoll

A linha “Maximum number of file descriptors” mostra o número máximo de descritores utilizado pelo squid, este valor é setado pela entrada max_filedesc no arquivo de configuração do squid.conf ou no momento da compilação do squid com o parametro –with-maxfd. Caso a entrada no squid.conf não esteja setada ela captura esta configuração do sistema ulimit da máquina. Normalmente esta configuração é 1024. Para obter use o seguinte comando:

ulimit -n

Para alterar o limite de arquivos abertos por um processo no seu ambeinte linux use o seguinte comando.

ulimit -n 4096

Para que isto se torne fixo altere o seu arquivo de configuração de limites que geralmente fica em /etc/security/limits.conf adicionando a seguinte linha.

* - nofile 4096

( Obs: configurações do PAM podem sobreescrever as configurações do limits.conf então caso tenha problemas de uma checada nele também )

Agora restart o seu squid.

service squid restart
/etc/init.d/squid restart
squid -k reconfigure

( como quiser ou seu sistema suportar )

( Em caso do debian que tem o costume de ficar alterando os arquivos padrões e pacotes você também deve alterar em /etc/defaults/squid a variável SQUID_MAXFD para o número requisitado )

Daí seguido disto vamos ver o resultado

Em ambiente freebsd para altera na sessão corrente

sysctl kern.maxfilesperproc=4096
sysctl kern.maxfiles=65535

Para manter as configurações altere o /etc/sysctl.conf adicionado as entradas:

echo 'kern.maxfilesperproc=4096' >> /etc/sysctl.conf
echo 'kern.maxfiles=65535' >> /etc/sysctl.conf

Observações interessantes:

“max_filedescriptors

can now be set runtime. Was previously hardcoded at build time and further limited by ulimit” – Notas do ultimo release estável do squid 2.7 sobre max_filedescriptors [4].

Para listar mais dados sobre os descritores de arquivos utilizado pelo squid use:

squidclient mgr:filedescriptors

Referência:
[1] - http://www.cyberciti.biz/faq/squid-proxy-server-running-out-filedescriptors/
[2] - http://en.wikipedia.org/wiki/File_descriptor
[3] - http://pt.wikipedia.org/wiki/Descritor_de_arquivo
[4] - http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9-RELEASENOTES.html
[5] - http://www.cyberciti.biz/faq/squid-increase-file-descriptors-limits-under-freebsd/ ( alteração para ambiente Freebsd )

Uma resposta

Subscribe to comments with RSS.

  1. Como sempre, com excelentes dicas, parabéns Marco!

    ps.: Desenho legao o do polvo =P

    Diego Damasceno

    01/09/2010 at 12:04


Deixe um comentário