Estou executando o Apache com um trabalhador MPM e php com fastcgi.
a seguir estão meus limites de mpm:
StartServers 5
MinSpareThreads 5
MaxSpareThreads 10
ThreadLimit 64
ThreadsPerChild 10
MaxClients 10
MaxRequestsPerChild 2000
Também configurei meu php-cgi com o seguinte:
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500
Estou percebendo que meu processo php-cgi médio está usando cerca de 200 MB de RAM, mesmo assim que são iniciados. No entanto, meu limite de memória do php é de apenas 128M.
Como isso é possível e o que posso fazer para diminuir o consumo de memória do php-cgi?
Responder1
Há casos em que o PHP pode exceder o limite de memória configurado (memória alocada diretamente nas extensões), mas suspeito que esse não seja o caso.
Estou percebendo que meu processo php-cgi médio está usando cerca de 200 MB
Como você mediu isso? A maioria dos segmentos TXT serão compartilhados - portanto, o uso real de memória é muito menor do que você veria no sistema de arquivos /proc ou em ps/top. Embora você possa tentar analisar a saída de lsof, na prática acho muito mais sensato recuar um pouco e observar o número de solicitações em andamento (por exemplo, do número de soquetes conectados) e comparar isso com a memória livre relatada ( menos buffers/cache).
Responder2
O limite de memória em PHP é o limite de memória interna - ou seja, essa é a quantidade que o mecanismo permitiria que o script do usuário alocasse através de seu alocador privado. Mas além disso há memória que é alocada pelo motor para suas necessidades internas, que nem sempre é contabilizada no limite (parte é, mas não toda), a memória sendo alocada por bibliotecas, etc. o uso seja um pouco maior que memory_limit
a configuração.
Além disso, como mencionado acima, alguns dos números relatados pelas ferramentas são memória alocada para o código, pilha, buffers de E/S do sistema operacional, memória compartilhada entre bibliotecas, etc.