não conseguiu abrir muitos arquivos abertos - limite máximo de php 1024 - Redhat - por que o novo limite não está funcionando?

1

Eu recebi esta mensagem durante a depuração de um problema em um programa PHP.

  • Eu já editei o /etc/security/limits.conf e adicionei
*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000

como instruído aqui ( link ). Depois disso, digitando

ulimit -Hn

e

ulimit -Sn

revela o novo limite, 500000.

  • Eu já editei o arquivo /etc/pam.d/common-session e adicionei a linha
session required pam_limits.so
  • Eu reiniciei o sistema. Meu programa continua a lançar uma exceção quando tenta abrir o arquivo # 1025.

  • Eu peguei o processo php PID (27263) e então fiz um cat / proc / 27263 / limits


Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             95124                95124                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       95124                95124                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

Como você pode ver, mesmo depois de definir essas configurações de todo o sistema, o processo do PHP ainda tem um limite máximo de 1024 arquivos abertos.

Por quê? Como posso mudar isso? Por que as configurações do sistema não estão funcionando para esse caso específico?

Obrigado

    
por glfabro 29.01.2015 / 20:58

1 resposta

2

Resposta curta (para um limite de 500000)

  1. Edite o /etc/security/limits.conf e adicione-o ao final do arquivo:
*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000
  1. Edite o arquivo / etc / sysconfig / httpd e adicione no final, adicione:
ulimit -n 500000
  1. Reinicialize (não sei se é absolutamente necessário)

  2. Bingo!

Resposta longa

Acontece que, de acordo com Faça ulimits funcionar com start-stop-daemon e discussão da lista de discussão da Red Hat ,

limits.conf(5) is the configuration for pam_limits(8), which is activated by the PAM stack according to the configuration in /etc/pam.d. However, start-stop-daemon(8) as launched from an init.d script doesn't pass through the PAM stack, so those kinds of settings are never applied.

Ou em termos mais simples,

/etc/security/limits.conf applies to logins, and user "apache" isn't logging in.

A solução proposta no primeiro link é editar o script init.d e adicionar o ulimit -n ao final do script.

No entanto, como pode ser observado no segundo link, se você editar o script /etc/init.d/httpd, uma atualização do sistema poderá sobrescrever o arquivo e as alterações desaparecerão.

É por isso que eles sugeriram aqui , aqui e aqui para editar o arquivo / etc / sysconfig / httpd e inserir o comando lá.

Foi o que eu fiz, e agora eu tenho um lindo gato / proc / pid / limits exatamente como eu queria:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             500000               500000               processes
Max open files            500000               500000               files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       95124                95124                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

e o programa não trava mais.

A propósito, o sistema é um servidor RHEL 6.6.

    
por 30.01.2015 / 17:57