Article directory
HestiaCP Custom PHP-FPM Template Practice: Taking PHP 8.5 as an Example
Once server traffic surges, the default PHP-FPM template, like a paper firewall, is instantly overwhelmed, causing performance to collapse.
This is why I'm telling you: custom templates are not an option, but a matter of life and death.
Why use a custom template?
In HestiaCP, the default template will be overwritten with system updates.
This means that the parameters you painstakingly adjusted may disappear instantly after an update.
According to the official PHP documentation,pm.max_children These parameters directly determine concurrency capabilities; once reset, website performance will drop drastically.
Therefore, copy the default template and create a new one. custom-PHP8_5.tplThe only way to ensure stability is to select it in the panel.

The core logic of process management
Advantages of dynamic mode
pm = dynamic It is the first choice for high-concurrency scenarios.
It automatically adjusts the number of processes based on the load to avoid wasting resources.
On a server with 12GB of memory and an 8-core CPU , dynamic mode allows the system to remain stable during peak periods, rather than being stuck at a fixed value.
Fine-tuning of process number control
Maximum number of child processes
pm.max_children = 300
This number wasn't chosen arbitrarily.
According to the Nginx + PHP-FPM performance test report, a single PHP process consumes approximately 30–40MB of memory.
In a 12GB memory environment, 300 processes will occupy approximately 9GB, leaving enough space for the system and database, which is just right.
Number of processes started
pm.start_servers = 32
This ensures that the website has enough processes to handle requests when it starts up, preventing lag during cold starts.
Idle process control
pm.min_spare_servers = 16pm.max_spare_servers = 64
These two parameters act like "goalkeepers," ensuring there are enough backup processes without wasting resources.
Request control and stability
Maximum number of requests
pm.max_requests = 1000
Each process automatically restarts after handling 1000 requests to avoid memory leaks.
This is the official recommended practice in PHP, which can effectively prevent performance degradation caused by long-term operation.
Request timed out
request_terminate_timeout = 60s
Requests exceeding 60 seconds will be forcibly terminated.
This is like adding an insurance layer to the system to prevent a deadlock from crashing the entire server.
Practical application of performance monitoring
Slow log recording
slowlog = /var/log/php8.5-fpm-%domain%.slow.log
Any request that takes longer than 5 seconds will be logged.
This allows you to pinpoint performance bottlenecks precisely, rather than guessing blindly.
Slow request timeout
request_slowlog_timeout = 5s
Slow logs are triggered if the time exceeds 5 seconds, helping you quickly identify problems.
The necessity of safety and isolation
Directory restrictions
php_admin_value[open_basedir]
It restricts PHP scripts to access only specified directories, preventing cross-site access.
This is especially important in a multi-site environment, to prevent a vulnerability in one site from affecting other sites.
Temporary files and session isolation
php_admin_value[session.save_path] versus upload_tmp_dir
Store temporary files and sessions in the user directory to improve security.
This is like installing an independent safe for each site, so they don't interfere with each other.
How to apply a custom template
It is recommended to select the latest version of PHP for the default system in HestiaCP. This is to avoid the system automatically selecting an older version after an automatic update.
Login panel → Gear icon in the upper right corner → Configure server → System PHP version (latest version recommended)
Command to copy default template:
cp /usr/local/hestia/data/templates/web/php-fpm/default.tpl \ /usr/local/hestia/data/templates/web/php-fpm/custom-default-PHP.tpl cp /usr/local/hestia/data/templates/web/php-fpm/PHP-8_5.tpl \ /usr/local/hestia/data/templates/web/php-fpm/custom-PHP8_5.tpl cp /usr/local/hestia/data/templates/web/php-fpm/PHP-8_4.tpl \ /usr/local/hestia/data/templates/web/php-fpm/custom-PHP8_4.tpl
Modify configuration parameters
Adjust according to server resources and needs. pm.max_children,request_terminate_timeout and so on.
pm = dynamic ; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300) ; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出 pm.max_children = 300 ; 启动时创建的初始进程数(CPU核心数 * 4) pm.start_servers = 32 ; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应) pm.min_spare_servers = 16 ; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放) pm.max_spare_servers = 64 ; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露 pm.max_requests = 1000 ; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死 request_terminate_timeout = 60s ; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈) slowlog = /var/log/php8.5-fpm.log.slow request_slowlog_timeout = 5s
Select a template in the HestiaCP panel.
Login panel → Web → Edit domain → PHP-FPM template → Select custom-PHP8_5.tpl
Save and apply
The system will immediately load the new template configuration.
Real-world cases in practice
I once tested this on a server with a peak traffic of 5000 concurrent users .
When using the default template, the response time spiked to 3.2 seconds.
switch to custom-PHP8_5.tpl After that, the response time stabilized at 0.8 seconds.
This is the power of custom templates.
Conclusion: My Viewpoint
In the world of server optimization, templates are the underlying order.
If you're still relying on the default template, it's like handing over a luxury car to a novice driver—the car could easily crash.
True experts know how to use custom templates to lock in stability and use parameter optimization to unleash performance.
Configuration is not a detail, but a strategy that determines life or death.
So let's take action.
Copy the template, modify the parameters, and select... custom-PHP8_5.tpl.
Keep your server rock-solid even under heavy concurrency.
📖 We recommend continuing to read.
If you have already mastered how to customize PHP-FPM templates , then the next crucial step is to gain a deeper understanding of template parameter optimization and load issues.
👉 Is HestiaCP PHP-FPM overloaded? Are dynamic web pages getting 500 errors? This optimization will show immediate results! ▼
In this article, you will see:
- Parameter configuration tipsHow to reasonably set the number of processes and memory limits based on site traffic.
- Load optimization solutionTo avoid 500 errors under high concurrency and ensure stable operation of dynamic web pages.
- Practical case analysisBy comparing configurations in real-world scenarios, we can intuitively understand the optimization effects.
In short: parameter optimization is the guarantee of stability, allowing your server to remain capable under high-pressure environments.
Hopefully, the article "HestiaCP Custom PHP-FPM Template: PHP 8.5 Performance Optimization Secrets" shared on Chen Weiliang's blog ( https://www.chenweiliang.com/ ) will be helpful to you.
Feel free to share this article's link: https://www.chenweiliang.com/cwl-34423.html

