Has there been an instance that you are trying to load your site, say even a simple WordPress and it feels just so slow that you might not even get a proper response. You might just only end up seeing an error.
This is exactly what happened to me today. I have a Ubuntu VPS with 4GB RAM and all of a sudden I get emails from Jetpack saying my site appears to be down. It hit me with so many questions especially, if something happened to my VPS. Did I lose my data? Blah…Blah…
But then I thought, let me just jump into the terminal and see what’s going on. The very first thing I did is restart my Nginx Server.
sudo service nginx restart
Now that my server had restarted, I was still seeing weird responses to my pages and other services. It was as if the entire system was choked down. But my graphs were showing still a huge amount of memory left out. So I decided to dig deeper but before doing that, let’s hit the command of restarting the Ubuntu server.
sudo shutdown -r now
Once my system restarted, I went to first check the logs at Nginx to see if something got screwed up. But I didn’t find anything useful. So I went to check the logs of the php-fpm engine and this is what I found.
server reached pm.max_children setting (5), consider raising it
It hit me as to what happened all of a sudden and I remembered, it’s probably due to some of the changes I made to one of the Image Caching Server. Anyways, I started and digging around the error message, especially the setting for pm.max_children = 5
After spending sometime, I found the place for this setting in /etc/php/7.0/fpm/pool.d/www.conf
Now, this is where the tricky part begins, as you have to ensure that the settings you do are not going to hamper your server with overload as well as they are sufficient enough to handle the load. Before we jump into it, let’s understand what we are trying to do here.
The log message with pm.max_children; pm stand for process manager. This process manager is responsible for instantiating child processes to handle the requests sent over to php-fpm engine.
Here the above image explains all the required values that need to be tweaked to get optimum performance from the server. Let’s look at the current configuration which I am having:
pm.max_children | 5 |
pm.start_servers | 2 |
pm.min_spare_servers | 1 |
pm.max_spare_servers | 3 |
So, now I needed to ensure that my configurations are somewhat reasonable based on my VPS configuration. But in order to do so, I need to know the max capacity that I can expect my child processes to reach. So I executed this command to know the current memory being utilized by the child processes.
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep php-fpm
ps -eo size,pid,user,command –sort -size | awk ‘{ hr=$1/1024 ; printf(“%13.2f Mb “,hr) } { for ( x=4 ; x<=NF ; x++ ) { printf(“%s “,$x) } print “” }’ | grep php-fpm
Now, once I hit the enter key, I got this result in my terminal
If you look closely, the max that one of the child processes reached was 89.00 Mb. So to compute the Approx. value of pm.max_children can be as simple as this:
pm.max_children = Total RAM dedicated to the webserver / Max of child process size
pm.max_children = 3948 / 89 = 44.36
Considering the memory for other processes, I believe it’s safe to say that I can easily set my pm.max_children to 40 at least.
pm.max_children | 40 |
pm.start_servers | 2 |
pm.min_spare_servers | 1 |
pm.max_spare_servers | 3 |
[09-May-2020 13:24:45] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 5 total children
[09-May-2020 13:24:46] 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 6 total children
As you can see above, I also had to adjust the values for pm.start_servers, pm.min_spare_servers, and pm.max_spare_servers else without doing, I was getting those warnings. Here are the latest values that I had set considering the warnings
pm.max_children | 40 |
pm.start_servers | 15 |
pm.min_spare_servers | 15 |
pm.max_spare_servers | 30 |
Please note that very high values may not do anything good for your system. It might even burden your system.
Hope it helps π
- Use TOTP for securing API Requests - July 12, 2024
- Backup Files from Ubuntu to Azure - December 14, 2023
- Read Gzip Log Files without Extracting - June 13, 2023
ps -eo size,pid,user,command βsort -size | awk β{ hr=$1/1024 ; printf(β%13.2f Mb β,hr) } { for ( x=4 ; x<=NF ; x++ ) { printf(β%s β,$x) } print ββ }β | grep php-fpm
-bash: syntax error near unexpected token `β%13.2f’
Apologies for the delay in my response. It could be due to the quotes. Try pasting the code completely and then replace the quotes correctly there. Probably that should help.
ps -eo size,pid,user,command –sort -size | awk ‘{ hr=$1/1024 ; printf(“%13.2f Mb “,hr) } { for ( x=4 ; x<=NF ; x++ ) { printf(“%s “,$x) } print “” }’ | grep php-fpm
Which command is giving the error?
Thanks for the information ! command giving syntax error