最後更新: 2018-01-22
介紹
php5-fpm - PHP FastCGI Process Manager
* process spawning
Pool
不同的 Pool 是不同設定的 php process, 比如 php version, upload_max_filesize
Pool 是用不同的 port 去區分 (Default first pool: 9000/TCP)
Daemon
runs as a daemon and receives Fast/CGI requests.
Client --> Nginx --> php-fpm --> php
* 當 Nginx 連不到 php-fpm proccess 時, 那 client 會收到 "502 Bad Gateway"
Tools
/etc/init.d/php5-fpm
/usr/sbin/php5-fpm
目錄
php5-fpm
Opts:
- -t Test FPM configuration file
- -i PHP information and configuration
- -m Show compiled in modules
php*-fpm 設定
php-fpm 主設定檔
/etc/php5/fpm/php-fpm.conf
error_log = /var/log/php5-fpm.log log_level = warning process.max = 128 # master process rlimit_files = 10240 # child processes to wait for a reaction on signals from master process_control_timeout = 0 include=/etc/php5/fpm/pool.d/*.conf
Pool 的設定
/etc/php5/fpm/pool.d/www.conf
# 這是 pool 的名, variable $pool 相當於這字 [www] # 這 pool 的 proccess 的執行身分 user = www-data group = www-data # TCP listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1 # backlog: maximum length to which the queue of pending connections # man 2 listen 有解釋 listen.backlog = 128 # Socket listen = /var/run/php5-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 # Proccess 數量設定 pm = dynamic # alive at the same time (ApacheMaxClients) # simultaneous requests that will be served. pm.max_children = 32 # children created on startu pm.start_servers = 4 # children in 'idle' pm.min_spare_servers = 2 pm.max_spare_servers = 6 # idle process will be killed pm.process_idle_timeout = 10s # each child process should execute before respawning pm.max_requests = 1024 # real-time FPM status monitoring # Default Value: not set # http://127.0.0.1/status Or http://www.foo.bar/status?full pm.status_path = /status # The access log file ; Default: not set ; Default Format: "%R - %u %t \"%m %r\" %s" ; %R: remote IP address ; %u: remote user ; %t: server time ; %m: request method ; %r: the request URI ; %s: status access.log = /var/log/fpm-php/pool/$pool.access.log ; The log file for slow requests slowlog = /var/log/fpm-php/pool/$pool.log.slow request_slowlog_timeout = 10 request_terminate_timeout = 10m # Limits the extensions of the main script FPM will allow to parse. security.limit_extensions = .php .php3 .php4 .php5 # Additional php.ini defines, specific to this pool of workers. php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@owncloud.datahunter.org php_flag[display_errors] = off php_admin_value[error_log] = /var/log/fpm-php/pool/$pool.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 128M php_admin_value[max_execution_time] = 180 php_admin_value[date.timezone] = Asia/Hong_Kong php_admin_value[upload_max_filesize] = 15M php_admin_value[post_max_size] = 20M php_admin_value[short_open_tag] = on
LOG
/var/log/php-fpm.log
Nginx 設定
setting:
location ~* \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; # disallows the FPM to process files in the /uploads/ directory if ($uri !~ "^/uploads/") { # fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass 127.0.0.1:9000; } }
Status page config in Nginx
Setting:
location ~ ^/(status|ping)$ { access_log off; allow 127.0.0.1; deny all; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; }
查看 status
curl -k https://owncloud.datahunter.org:8443/status
pool: www process manager: dynamic start time: 03/May/2014:09:29:47 +0000 <-- # started or reloaded start since: 110 accepted conn: 12 listen queue: 0 max listen queue: 0 listen queue len: 128 idle processes: 3 active processes: 1 total processes: 4 max active processes: 1 max children reached: 0 <-- # 多少次到達了 children limit
listen queue
The number of request in the queue of pending connections.
If this number is non-zero, then you better increase number of process FPM can spawn.
max listen queue
the maximum number of requests in the queue of pending connections since FPM has started
listen queue len
the size of the socket queue of pending connections
max active processes
the maximum number of active processes since FPM has started