php-fpm.conf 参数详解

user = www

group = www
这两个参数向来要和nginx的user参数保持一致,表示php-fpm运行的身份和所说的用户组

2. listen 有两种选择  listen = 127.0.0.1:9000 或者是unix:/path/to/filename.sock  ,两者的区别可以具体参见:http://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-unix-domain-socket/  ,简而言之,涉及到internet socket和 unix domain socket 之间的差异,本机建议通过sock 文件,实现nginx和php-fpm之间的通信,如果涉及到其他的机器,则必须是ip:port的方式。

3  . listen.backlog = 65535    这里涉及到 半队列长度的概念 ,与tcp的三次握手协议有关。http://www.piao2010.com/linux%E8%AF%A1%E5%BC%82%E7%9A%84%E5%8D%8A%E8%BF%9E%E6%8E%A5syn_recv%E9%98%9F%E5%88%97%E9%95%BF%E5%BA%A6%E4%BA%8C

4. pm (直接翻译的配置文件的注释)
选择如何控制子进程的数量

  • 静态方式 – 固定数量(pm.max_children)的子进程。
  • 动态方式 – 子进程的数量是根据下面的指标动态确定的,在这种管理方向中,至少有一个子进程
    • pm.max_children – 同时生成的最大的子进程数量
    • pm.start_servers – 开始运行的时候创建的额子进程的数量
    • pm.min_spare_servers – 出于闲置状态的子进程的最小数量,如果闲置状态数小于这个数量,则创建新的子进程
    • pm.max_spare_servers – 出于闲置状态的子进程的最大数量,如果闲置状态数大于这个数量,则杀掉多余的进程
  • 按需处理 – 开始的时候不创建子进程,子进程会在请求连接的时候fork,下面的参数会被用到:
    • pm.max_children – 同时创建的最大的子进程数量,
    • pm.process_idle_timeout – 子进程在闲置多久之后,会被杀掉,注意,这个值是必须有的

5. pid – 这个意义不大,主要是说以后这个.pdf文件里面的id号归这个进程使用,算是固定下来运行时候的pid号码吧

6.  request_terminate_timeout = 30   请求的最大终止时间,默认单位为妙

如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会超时,我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的request_terminate_timeout参数。

request_terminate_timeout默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免”502 Bad Gateway”。解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给file_get_contents加一个超时参数。

7.   process_control_timeout = 0   ,除了官方的翻译之后,未见到任何解释

8. syslog_facility (注释翻译)

syslog  工具 是用来明确如何记录日志信息的,使syslogd可以处理来自不同程序下的不同日志信息,syslog可能的值有(ex  daemon equiv LOG_DAEMON),默认选择了daemon。

syslogd 是linux下面的处理日志信息的软件/命令 http://linux.about.com/od/commands/l/blcmdl8_syslogd.htm ,syslog应该是和syslogd进行交互的,处理日志信息的。

这里的facility具体是指LOG_AUTH(安全/授权消息),LOG_AUTHPRIV(安全/授权消息(私用)),LOG_CRON(cron守护进程),LOG_DAEMON(系统守护进程),LOG_FTP(FTP守护进程),LOG_KERN(内核进程),LOG_LOCAL0(本地使用),LOG_LPR(行式打印机系统),LOG_MAIL(邮件系统),LOG_NEWS(网络新闻系统),LOG_SYSLOG(SYSLOG内部产生的消息),LOG_USER(任意的用户消息),LOG_UUCP(UUCP系统)(摘自UNIX网络编程第一卷第三版313页)

9.syslog_ident  是追加在所有的信息之前的,如果你在同一台服务器上面,有多个fpm实例运行,可以修改这个名字,满足需求。

10.Log_level 可能的值是alert,error,warning,notice,debug,默认值notice.

11,emergency_restart_threshold 如果一定时间内以SIGSEGV或者SIGBUS状态退出的子进程达到该值的两,fpm就会重启,0表示关闭。

 

Leave a comment

Your email address will not be published.

*