Definindo o ulimit corretamente para PHP no Linux

5

Eu tenho /etc/security/limits.conf definido para o seguinte:

nobody soft nofile 409600
nobody hard nofile 1024000
phpuser soft nofile 409600
phpuser hard nofile 1024000
httpd soft nofile 409600
httpd hard nofile 1024000
* soft nofile 409600
* hard nofile 1024000

No entanto, as páginas do php ainda são exibidas:

[...] failed to open stream: Too many open files [...]

A definição de ulimit -n 10000 parece ser apenas uma correção temporária.

Eu também tenho o seguinte conjunto:

fs.file-max = 20970800
net.core.somaxconn = 1024000
kern.maxfilesperproc = 16638400
kern.maxfiles = 819200
    
por Jason 17.12.2013 / 19:17

2 respostas

3

Eu vejo dois problemas em potencial.

Seu limite pode não se aplicar ao phpuser

phpuser pode ignorar seu novo limite porque pode não usar o PAM para "fazer login", portanto, /etc/security/limits.conf não se aplicaria. Veja esta resposta para mais detalhes.

O limite total do sistema é atingido

Você está mudando os limites dos processos dos usuários. O kernel também possui um limite de todo o sistema para o número de identificadores de arquivos abertos.

Isso pode ser seu problema. Você pode verificar o valor assim:

$ sysctl fs.file-max
$ sysctl fs.file-nr

By padrão , arquivo-máximo deve ser 10% da memória do seu sistema disponível em kB , que pode não ser um número muito grande: 4 GB de RAM ~ 400000 arquivos abaixo do limite que você está tentando definir.

O documentação diz:

The three values in file-nr denote the number of allocated file handles, the number of allocated but unused file handles, and the maximum number of file handles. Linux 2.6 always reports 0 as the number of free file handles -- this is not an error, it just means that the number of allocated file handles exactly matches the number of used file handles.

    
por 17.12.2013 / 23:07
0

Você pode definir ulimit permanentemente editando limits.conf.check este link

link

No caso de arquivos php, veja este tópico também

link

    
por 17.12.2013 / 19:41