手记

关于php-fpm子进程设置

php-fpm的两种进程管理模式
php-fpm的进程数也是可以根据设置分为动态和静态的。
一种是直接开启指定数量的php-fpm进程,不再增加或者减少;
另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限

涉及到的几个参数:
   pm.max_children:静态方式下开启的php-fpm进程数量。
   pm.start_servers:动态方式下的起始php-fpm进程数量。
   pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
   pm.max_spare_servers:动态方式下的最大php-fpm进程数量。



如果pm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。

如果pm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动 pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和 pm.max_spare_servers之间调整php-fpm进程数



这个子进程到底设置多少是合理的呢
利用apache自带的ab压力测试工具做了个实验
首先打开目标服的nginx status模块
server{
       location /nginx-status {
       stub_status on;
       access_log   off;
       }
}

在nginx配置文件中添加如上一段server配置

直接访问http://domain/nginx-staus 就可以显示如下一段数据:
Active connections: 155
server accepts handled requests
1950 1950 1951
Reading: 0 Writing: 154 Waiting: 1

以上含义解释如下:
active connections:155 #nginx 正处理的活动连接数 353个。
server accepts handled requests
nginx启动到现在共处理了 1950个连接 ,
nginx启动到现在共成功创建 1950 次握手 ,
请求丢失数=(握手-连接),可以看出,我们没丢请求
总共处理了1951 次请求。
Reading :nginx 读取到客户端的 Header 信息数。
Writing : nginx 返回给客户端的 Header 信息数。
Waiting : Nginx 已经处理完正在等候下一次请求指令的驻留连接。开启 keep-alive 的情况下,这个值等于 active – (reading + writing)。


用ab测试工具访问该域名的index.php文件
ab网站压力测试命令
格式: ./ab [options] [http://]hostname[:port]/path
-n 测试会话中所执行的请求个数,默认时,仅执行一个请求
-c 一次产生的请求个数。默认是一次一个
-t 测试所进行的最大秒数
-v 设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。

一般工作中我们只用-n 和 -c
ab -c 500 -n 5000  http://s3.app1101079596.qqopenapp.com/index.php  
该命令表示500个并发用户发出5000个请求看目标服的情况

目标服上查看nginx-status和php进程个数
curl http://s3.app1101079596.qqopenapp.com/nginx-status
ps -ef | grep php-fpm | egrep -v '(master|grep)' | wc -l


1人推荐
随时随地看视频
慕课网APP