Como contornar “Muitos arquivos abertos” no debian

8

Se eu quiser ver todos os arquivos de log relevantes do meu servidor apache2 de uma vez, eu uso

tail -f /var/kunden/logs/*log /var/kunden/logs/*log /var/log/apache2/*log |grep -v robots|grep -v favicon

Mas, como esses arquivos são muitos arquivos, gostaria de aumentar esse limite.

Como posso aumentá-lo para uma sessão ssh? E como eu poderia aumentá-lo globalmente em todo o sistema?

Eu posso ver que o limite de arquivos abertos é 1024 na minha máquina:

ulimit -n
1024
    
por rubo77 04.08.2013 / 04:58

2 respostas

15

É importante saber que existem dois tipos de limites:

  • Um limite de segurança é configurável apenas pela raiz. Este é o maior valor possível (limite) para o limite flexível.
  • Um limite suave pode ser definido por um usuário comum. Este é o limite real em vigor.

Solução para uma única sessão

No shell, defina o limite flexível:

ulimit -Sn 2048

Este exemplo aumentará o limite real para 2048, mas o comando só será bem-sucedido se o limite rígido (verificar: ulimit -Hn ) for igual ou maior. Se você precisar de valores mais altos, aumente o limite máximo usando um dos métodos abaixo. Os limites são definidos por processo e são herdados por processos recém-gerados, portanto, qualquer coisa executada após esse comando no mesmo shell terá os novos limites.

Alterar limite máximo em uma única sessão

Isso não é fácil, porque somente o root pode alterar um limite rígido e depois de mudar para o root, você precisa voltar ao usuário original. Aqui está a solução com sudo :

sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""

Solução para todo o sistema

No Debian e em muitos outros sistemas que usam pam_limits , você pode definir os limites para todo o sistema em /etc/security/limits.conf e em arquivos em /etc/security/limits.d . O arquivo conf contém descrição. Linhas de exemplo:

@webadmins       hard     nofile     16384
@webadmins       soft     nofile      8192

Isso definirá o limite rígido e o limite padrão para usuários no grupo webadmins após o login.

Outros limites

O valor do limite rígido é limitado pelo limite global do valor dos descritores de arquivos abertos em /proc/sys/fs/file-max , que é bastante alto por padrão nas distribuições modernas do Linux. Este valor é limitado pelo valor NR_OPEN usado durante a compilação do kernel.

Não há uma solução melhor?

Talvez você possa verificar se todos os arquivos *log enviados para tail -f são arquivos realmente ativos que precisam ser monitorados. É possível que alguns deles já estejam fechados para o registro e você possa simplesmente abrir um número menor de arquivos.

    
por 04.08.2013 / 06:37
0

Eu tive o aviso do PHP no meu Apache error.log:

failed to open stream: Too many open files in ...

Então eu descobri que o apache define este valor individualmente ao iniciar (no meu Ubuntu 14.04). Está configurado em /etc/apache2/envvars . Diz:

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

então eu tive que ajustar a terceira linha.

    
por 02.06.2015 / 13:01