我们最近迁移到 PHP-FPM。但是,我们遇到了一些长时间运行的脚本的问题。代码大致如下:
foreach ($items as $item) {
set_time_limit(30);
proccessThatTakesAround2secs();
}
正常的 PHP 脚本时间限制也是 30 秒。这之前工作正常,因为我们将每个项目的剩余时间限制重置回 30 秒。大约有 1000 个项目,这意味着脚本总共需要大约 30 分钟才能完成。然而,我们后来遇到了以下问题:
FastCGI:与服务器“/usr/local/php-5.6.24/sbin/php5-fpm”的通信中止:空闲超时(30 秒)
现在我的问题是,将空闲超时增加到一个小时左右但仍确保 PHP 脚本运行时间不超过 30 秒是否明智,除非我们使用set_time_limit
? 有没有办法在每个脚本的基础上设置空闲超时(类似于set_time_limit
?)
这是我们的池配置:
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = static
pm.max_children = 55
pm.max_requests = 10000
php_value[memory_limit] = 128M
php_value[max_execution_time] = 30
php_value[upload_max_filesize] = 20M
php_value[post_max_size] = 20M
php_value[max_input_vars] = 9999
这是我们的 fastcgi.conf
<IfModule mod_fastcgi.c>
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/local/php-5.6.24/sbin/php5-fpm
FastCgiExternalServer /usr/local/php-5.6.24/sbin/php5-fpm -socket /var/run/php5-fpm.sock -idle-timeout 30 -pass-header Authorization
<Directory /usr/local/php-5.6.24/sbin/>
Require all granted
</Directory>
</IfModule>