85

I have NGINX and php5-fpm. Several times per hour my website stucks and in logfile I see the following:

WARNING: [pool www] server reached pm.max_children setting (5), consider raising it.

The /etc/php5/fpm/pool.d/www.conf file contains the following configuration:

pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 

Server: AMD Opteron™ 3280, Octo-Core, 8x 2.4 GHz, 16 GB DIMM (DDR3).

What numbers should I put in www.conf file for this server?

3 Answers 3

73

There are many possible reasons why your PHP-FPM would reach the max_children. Most common ones are:

  • A lot of parallel requests from your clients
  • Slow execution of the PHP scripts
  • Very low setting of the max_children

Looking at the specs of your machine, assuming there is nothing else than PHP+Nginx running, I think you could set it much higher than 5. You say you have 8 Cores, usually Nginx needs much less CPU than PHP, so with 5 children you will probably never be able to use all of them. I'm usually setting it to something like the number of cores x 2 or number of cores x 4, depending on the memory consumption of your PHP scripts.

5
  • It's a dating website with php chat and users send millions of instant messages. Last night when I had ~300 users online, the command netstat -an |grep 80 |wc - result was almost 400. Commented Feb 16, 2013 at 15:50
  • 3
    I actually have a similar dating website. I think you definitely need more PHP children. My configuration is as following: 20k concurrent online users, 12 PHP machines with 8 Cores each, 32 workers on each of the PHP machines. That works pretty well. You should also look at how much free memory you have, I suspect you have some, unless your PHP is huge. If you have free memory, why not use it for some more workers? Commented Feb 16, 2013 at 15:51
  • 1
    @user1821484 This is correct; pm.max_children is much too low. A value of 10 is reasonable for a small VPS server with 1GB of RAM; you have a much larger server. Raise this value until you stop receiving the errors, then raise it again in case you get a traffic spike. Commented Feb 16, 2013 at 19:36
  • 1
    Thanks for answers. I increased pm.max_children setting to 10 and now I started to get this error: WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 8 total children. Can somebody suggest me what I need to increase? Thanks. Commented Feb 17, 2013 at 17:12
  • cores x 2 or cores x 4 sounds really low to me. I have a machine with 8 cores and 8GB RAM with pm.max_children=48 and we still get the server reached pm.max_children warnings. This machine is nowhere near its CPU or memory limits. A better approach I think would be to optimize this setting in conjunction with corresponding nginx (or apache) settings and choose a value after determining how much memory each PHP process consumes. Commented Jan 24, 2019 at 2:29
40

I found that by setting the pm.max_requests value (which is commented out by default) helped in fixing these errors. This setting forces child requests to respawn after executing a certain number of requests and can be helpful if there are memory leaks somewhere in your code or 3rd party libs.

In /etc/php-fpm.d/www.conf:

pm.max_requests = 500 
2
  • This tutorial helps too: serverpilot.io/docs/… Commented Mar 13, 2023 at 11:18
  • The path in Debian was /etc/php/8.2/fpm/pool.d/www.conf Commented May 11 at 15:18
3

I had the same problem whith my docker php-fpm and I fixed it by modifing parameters in these files: /usr/local/etc/php-fpm.d/www.conf /usr/local/etc/php-fpm.d/www.conf.default

The new parameters are :

pm = dynamic
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.