您的位置 首页 php

php-fpm 进程数真不够用吗?

近来看到某些项目,出现异常,负载会飙升到 100 ,200 。

运维的亲们认为 php-fpm 不够用。把标准的配置 100 个 php-fpm 进程修改为 150 个,200 个,或者更大。so,那么

一切猜想还得通过实际来验证。

测试仍然是通过 tcpcopy 这种方便快捷得工具。引流 播放页的请求。修改 php-fpm 配置,主要修改如下:

pm = static -- - 进程数为静态

pm.max_children = 10 --- 开启 10 个

pm.status_path = /status --- 增加一个状态页

分别在 8 core 和 24 core 下进行测试:

[root@SHANGH21-88-DX-DB ~]# curl ‘

……………………………..

idle processes: 0

active processes: 10

total processes: 10

max active processes: 10

max children reached: 0

这是一种比较忙的节奏,但是看nginx 的 error,基本也没有响应出问题的情况。

修改 pm.max_children = 50, 再来看看:

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 36

active processes: 14

total processes: 50

max active processes: 39

max children reached: 0

看到 max active processes 才 39 个。所以 50 个就可以满足了。

保持 50 个 php-fpm 进程,放大 nginx 的请求为当前的 5 倍。php-fpm 的状态:

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 0

active processes: 50

total processes: 50

max active processes: 50

max children reached: 0

so,我们再增大 php-fpm 的进程数量,修改到 100 个 php-fpm,负载会不会好些呢?

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 0

active processes: 100

total processes: 100

max active processes: 100

max children reached: 0

load 只是一路的在上涨,php-fpm 的也没有空闲的。

nginx 的 error 开始间歇性有了 104 的错误:

recv() failed (104: Connection reset by peer) while reading response header from upstream

这种情况下解决的方法,重启服务是没有意义的操作。

我们再来对比一下 24 core 的情况:

按照上门的测试情况再来一边:

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 0

active processes: 10

total processes: 10

max active processes: 10

max children reached: 0

nginx error 日志会有偶尔的 104 错误。

调整 php-fpm 进程数为 50 个,

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 34

active processes: 16

total processes: 50

max active processes: 32

max children reached: 0

没有 104 情况,负载很正常。

保持 php-fpm 进程数为 50 ,放大请求为原来的 5 倍:

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 0

active processes: 50

total processes: 50

max active processes: 51

max children reached: 0

没有 104 ,还可以 hold 住。nginx error 偶尔有这种错误:

zero size buf in output t:1

增大进程到 100 个 php-fpm,再来看看:

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 29

active processes: 71

total processes: 100

max active processes: 100

max children reached: 0

基本上负载无变化,可以 hold 住。nginx 没有错误日志。

把请求放到 10 倍,看看:

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 0

active processes: 100

total processes: 100

max active processes: 101

max children reached: 0

开 500 个 php-fpm

[root@SHANGH21-88-DX-DB logs]# curl ‘

……………………………..

idle processes: 167

active processes: 333

total processes: 500

max active processes: 501

max children reached: 0

nginx 伴随着 111 ,104 的错误。

看累了,表格统计一下上面的测试:

php 进程不够用,还是系统 cpu 忙,需要实际验证,而不是盲目的增加 php-fpm 进程数。

文章来源:智云一二三科技

文章标题:php-fpm 进程数真不够用吗?

文章地址:https://www.zhihuclub.com/150461.shtml

关于作者: 智云科技

热门文章

网站地图