Como lidar com erros: muitos arquivos abertos no sistema?

3

Estou executando um cron e a saída vem para o meu id e fica abaixo como saída:

/bin/sh: /usr/bin/php: Too many open files in system

Cron é executado a cada 5 minutos.

Verificaram /var/logs/cron e o cron é executado a cada 5 minutos.

Os sites estão funcionando bem no servidor.

    
por kenorb 10.08.2011 / 14:40

2 respostas

6

Isso significa que seu sistema ficou sem identificadores de arquivo, no seu php ou em outro aplicativo. Certifique-se de fechar todos os arquivos que abrir para manipular arquivos gratuitamente.

Para o número de identificadores de cada programa em execução, use (como root):

for p in $(ps -A -o pid); do
    nh=$(ls /proc/$p/fd  2>/dev/null | wc -l) &&
    exe=$(readlink -f /proc/$p/exe  2>/dev/null) &&
    echo "$p ($exe): $nh"
done

Para uma saída mais detalhada, use lsof .

Você também pode aumentar o número de possíveis identificadores de arquivos do sistema modyfing /etc/security/limits.conf (que afeta as alterações em /proc/sys/fs/file-max ), e diminuí-lo para a sessão de terminal atual com ulimit -n .

    
por 10.08.2011 / 14:44
0

Verifique quantos arquivos você tem atualmente abertos no sistema:

$ sysctl kern.num_files

e qual é o limite do seu kernel:

$ sysctl kern.maxfiles

Para verificar quais arquivos regulares estão abertos, este comando pode ajudar:

lsof | grep -w REG | less

Se o seu limite for muito baixo, aumente-o com esses comandos (executados como root):

sysctl -w kern.maxfiles=20480
sysctl -w kern.maxfilesperproc=4096

Nota: Adicione sudo , se necessário, se estiver executando a partir da conta do usuário.

e tente novamente.

Para defini-lo permanentemente, adicione-o ao seu /etc/sysctl.conf :

kern.maxfiles=20480
kern.maxfilesperproc=4096

Se você não tiver acesso para alterar os limites, entre em contato com seu provedor de hospedagem.

    
por 05.10.2017 / 13:50