Hello, i know there are tons of articles around the web for such topic, but i really dont like to tune my server just with given figures without understanding it.
also i highly rely on this community as most of all guides are very details. also thanks to @jtittle & @hansen for their excellent support.
basically my server has separate web server & database server (both are 1gb each)
and i also have 2 pools, 1 for my main site/community(wordpress), another for my application(codeigniter) which is on a sub-domain.
the application is going to be using most of the resources i assume (even though its on codeigniter framework which is already very lightweight), as main site is not that large, and on top of that its fastcgi enabled.
so what should be the pools configuration for my setup?
till now i didnt changed the default value, so both pools are running on the same value. but after googling a lot, i think this could be a good setting for my 2 php pools.
For Both site
emergency_restart_threshold 10
emergency_restart_interval 1m
process_control_timeout 10s
Main site
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 300
request_slowlog_timeout = 5s
slowlog = /var/log/php/7.0/fpm/slowlog-site.log
PHP Application
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
request_slowlog_timeout = 5s
slowlog = /var/log/php/7.0/fpm/slowlog-app.log
Please reply here your recommendation guy’s.
thanks in advance.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in Q&A, subscribe to topics of interest, and get courses and tools that will help you grow as a developer and scale your project or business.
@newbie
When it comes to PHP-FPM configuration, I generally to stick close to the defaults with a few minor changes unless there’s a need to modify settings further (i.e. higher levels of traffic).
** rlimit_files**
This setting defines the open file descriptor
rlimit
for the master process. I’d set to this something such as65536
, though you’ll also need to make sure you set this at the OS level as well as defaults are generally1024
.Inside your PHP-FPM configuration, you’d define:
You’d then need to open up
/etc/security/limits.conf
.Find:
And below it, add something such as:
You’ll want to set this per user, and would change
httpd
to the user in your PHP-FPM config. So if you havemainuser
andappuser
, you’d use:security.limit_extensions
This setting limits PHP-FPM to executing files with the
.php
extension, if defined. It’s a good idea to set or define this directive and that can be done using:…
Beyond that, I wouldn’t really prematurely try to optimize PHP-FPM until you start noticing issues or there’s a need. Like most services, you could easily exhaust resources with settings that try to start too many processes.
With FastCGI Caching enabled, you can honestly get by with the defaults or just slight changes as the cache is going to reduce a lot of what the service would normally need.
When you have FastCGI Caching enabled, NGINX is serving the static files, not PHP, so once a file is cached, NGINX is taking over until the cache expires or is purged – then the first request is going to result in a cache HIT, and the process repeats.
I do prefer on demand setup, so process get always killed and freshly restarted when not in use. pm = ondemand
And please watch your pm.max_children, 10 + 5 (15) it is way over for your 1G ram server. You assume that each process will take no much than 68.26 MB … and this calculation is wrong, I did not remove the base memory of your system and a buffer to don’t blow the things up.
Before explaining how to calculate the pm.max_children, have you created a swap memory on your server? You should, backup ram to avoid server bust…
Ubuntu (2 GB): fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo “/swapfile none swap sw 0 0”>>/etc/fstab free -m
Ok now the calculation of pm.max_children: [Total RAM] - [Server idle mem] - [buffer: (Total RAM * 0.1)] = PHP-fpm available memory
So in your case lets say you want at least 128 Megs per process (children) 1024 - 140 - (1024*0.1) = 782 MB PHP-fpm available memory
So you still want 128 Megs per process… 782 / 128 = 6
So you got pm.max_children = 6 to divide into your 2 applications you got… 2 / 4? 3 / 3?
Note that if children are all busy, request are going to a queue… Way better then overloading your server memory and having your server not responding at all…