13

最近、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 秒)

ここで私の質問は、アイドル タイムアウトを 1 時間程度に増やしても、使用しない限り、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>
4

2 に答える 2