我有一个使用 prestashop 的低流量网站,并将 php-fpm 7.4 设置为按需,以免耗尽所有资源,因为大多数时候都没有任何高流量,配置如下:
pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 10s
pm.max_requests = 500
但是我注意到,当我使用 siege 进行测试时,php 并没有终止进程:
siege -b -i -c 10 -t 20S --no-parser -d 1s -f url.txt
php-fpm 报告称,即使过了 10 秒,甚至一整夜,仍有 10 个空闲进程,它们仍处于空闲状态,并且不会终止空闲进程。我发现 process_idle_timeout 直接对应于未终止的空闲进程数量,例如,如果我将 process_idle_timeout 设置为 1 秒,那么它会终止除 1 个空闲进程之外的所有进程,如果我将其设置为 5 秒,那么 5 个进程将处于空闲状态,等等。是我做错了什么,还是这是一个错误?
答案1
我认为这是由于pm.min_spare_servers
选择。它们不会被视为闲置,并被删除,因为一定数量的“备用”服务器(进程)需要始终可用。