fpm配置
// tcp socket listen = 127.0.0.1:9000
Shell
// unix socket // 这里的php-fpm.sock可以放在 /dev/shm 目录,/dev/shm/是一个内存的目录,相对读写的速度会快一点。 // 需要注意php-fpm和nginx配置的权限 // sudo touch /dev/shm/php-fpm.sock // sudo chown www:www /dev/shm/php-fpm.sock // sudo chmod 775 /dev/shm/php-fpm.sock listen = /tmp/php-fpm.sock
Shell
nginx配置 location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;; fastcgi_pass 127.0.0.1:9000; //fastcgi_pass unix:/tmp/php-fpm.sock; fastcgi_index index.php;}
Shell
unix socket方式要比tcp的方式快而且消耗资源少,因为socket在nginx和php-fpm的进程之间通信,而tcp需要经过本地回环驱动,还要申请临时端口和tcp相关资源。但是unix socket会显得不是那么稳定,当并发连接数爆发时,会产生大量的长时缓存,在没有面向连接协议支撑的情况下,大数据包很有可能就直接出错并不会返回异常。而TCP这样的面向连接的协议,可以保证通信的正确性和完整性。
如果nginx和php-fpm都在同一台机器,两种方式都可以使用;但是如果nginx和php-fpm不在同一台机器,又不想在每个机器装Nginx就只能选择tcp socket方式。
ps: 一般情况我会选择unix socket方式部署项目,因为项目流量不大,至于负载均衡每个节点服务器安装nginx+php-fpm
// 运行模式: 可用值:static,ondemand,dynamic ,一般选dynamic,(当项目请求稳定在一个范围可以使用static,减少进程频繁切换的开销,根据项目情况配置)pm = dynamic // 允许创建的最大子进程数 pm.max_children = 50// 起始进程数 仅在 pm 设置为 dynamic 时使用 pm.start_servers = 10// 最小空闲进程数(清理后保留的进程数),仅在 pm 设置为 dynamic 时使用 pm.min_spare_servers = 5// 最大空闲服务进程的最大数目 仅在 pm 设置为 dynamic 时使用 pm.max_spare_servers = 15// 单个请求的超时中止时间(单位默认s),建议不要设置太大 request_terminate_timeout = 30// 请求执行超过多少时间记录为慢日志(单位默认s)request_slowlog_timeout = 30// 慢日志记录文件 $pool为进程池名称、下文会说明何为进程池 slowlog = /opt/www/$pool.slow.log
Shell
pm.status_path = /phpfpm_status
Shell
// nginx配置 server { listen 80; server_name 127.0.0.1; allow 127.0.0.1; location /phpfpm_status { fastcgi_pass unix:/tmp/php-cgi.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; } }// 获取状态信息:curl http://127.0.0.1/phpfpm_status
Shell
字段说明
pool php-fpm pool的名称,大多数情况下为www process manager 进程管理方式,建议配置为dynamic start time php-fpm上次启动的时间 start since php-fpm已运行了多少秒 accepted conn pool接收到的请求数 listen queue 处于等待状态中的连接数,如果不为0,需考虑增加php-fpm进程数 max listen queue 从php-fpm启动到现在处于等待连接的最大数量 listen queue len 处于等待连接队列的套接字大小 idle processes 处于空闲状态的进程数 active processes 处于活动状态的进程数,如果活动进程数太小 空闲太多 可以将最大空闲进程数调小一些 total processess 进程总数 max active process 从php-fpm启动到现在最多有多少进程处于活动状态 max children reached 当pm试图启动更多的children进程时,却达到了进程数的限制,达到一次记录一次,如果不为0,需要增加php-fpm pool进程的最大数 slow requests 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般mysql慢查询、请求第三方接口会导致记录为慢日志
Shell
配置举例:
......[www1]user = www group = www listen = 127.0.0.1:9000 pm = dynamic pm.max_children = 50pm.start_servers = 10pm.min_spare_servers = 5pm.max_spare_servers = 15request_terminate_timeout = 30request_slowlog_timeout = 30slowlog = /opt/www/$pool.slow.log[www2]listen = /dev/shm/php-fpm.sock user = www group = www pm = dynamic pm.status_path = /phpfpm_72_status pm.max_children = 250pm.start_servers = 50pm.min_spare_servers = 30pm.max_spare_servers = 140request_terminate_timeout = 100request_slowlog_timeout = 30slowlog = var/log/slow.log......
Shell
一般情况只会配置一个池,建议可以按照项目配置池,重启看一下进程长啥样子.....
来自LW放下http://www.putyy.com