我们安装php,在配置PHP-FPM的时候一般搜到的配置,大多数都是一样的,推荐你使用’dynamic’进程管理(process manager,在配置中简称位pm)模式来运行。虽然这没什么问题,但是本文将会探究最佳运行模式。
Contents
为什么要选择’ondemand’来代替’dynamic’来做为进程管理器
在大多数的配置指南中,都是这样配置的,然后你会直接复制粘贴放在你的配置文件中。
[pool_name] ... pm = dynamic pm.max_children = 200 pm.start_servers = 50 pm.min_spare_servers = 20 pm.max_spare_servers = 40 pm.max_requests = 500
这个时候你将如何配置最小和最大的进程数?这些指南其实也是盲目进行类配置,比如上面的列子中,每个pool中运行50个子进程(pm.start_servers=50)。如果你是一个流量相当低的站点,其实是相当浪费的。比如你的服务器上,用top看进程,显示是这样的:
... root 3986 4704 ? Ss 19:04 0:00 php-fpm: master process (/etc/php-fpm.conf) www 3987 4504 ? S 19:04 0:00 \_ php-fpm: pool pool_name www 3987 4504 ? S 19:04 0:00 \_ php-fpm: pool pool_name www 3987 4504 ? S 19:04 0:00 \_ php-fpm: pool pool_name ...
不管你的php是否在使用,这50个子进程将运行着。
Ondemand Process Manager
在我不断的摸索中,对每一个pm进行测试后,发现ondemand的模式,是最好的。可惜的是,关于这方面的文档实在太少了。为什么要推荐?根据字面意思,ondemand就是按需加载,是根据你的需求来调用的。而且配置起来也是相当的简单。
[pool_name] ... pm = ondemand pm.max_children = 50 pm.process_idle_timeout = 10s pm.max_requests = 500
需要启用’ondemand’需要在PHP5.3.8之后,改后配置,重启php,在进程列表中是这样的。
root 3986 4704 ? Ss 19:04 0:00 php-fpm: master process (/etc/php-fpm.conf)
只有一个PHP-FPM的主进程运行着,不会预先载入很多个子进程,当有调用的时候,它会自动启用,最多会启用50个子进程(是根据pm.max_children)。因此当有2个请求的时候,进程列表中会这样显示:
... root 3986 4704 ? Ss 19:04 0:00 php-fpm: master process (/etc/php-fpm.conf) www 3987 4504 ? S 19:04 0:00 \_ php-fpm: pool pool_name www 3987 4504 ? S 19:04 0:00 \_ php-fpm: pool pool_name
而配置中的”pm.process_idle_timeout”,当你的进程空闲挂起,没有再被请求的时候,它将会被自动回收。
当然这里需要说明的是,如果你的站点是时时运行在高请求模式下,’ondemand’可能不太适合于你。因为预先启动最大PHP-FPM子进程,可以让所有的请求直接进行处理,而不需要等待进程的启动。而90%的站点,可能选择’ondemand’会比’static’或者’dynamic’要好很多。
0 Comments.