全球主机交流论坛

标题: 彻底迷惑了。。php-fpm设置越大,负载能力越差。。。 [打印本页]

作者: shylocker110    时间: 2014-12-19 06:01
标题: 彻底迷惑了。。php-fpm设置越大,负载能力越差。。。
本帖最后由 shylocker110 于 2014-12-19 06:06 编辑

大部分的优化教程都告诉我们,php-fpm.conf中把max_children默认开启5个进程根据内存大小来优化,每一个php-cgi所耗费的内存在20M左右。。这里面并没有提到php-cgi对CPU的占有情况。。。

拿一个4核 1G内存的VPS 做测试,压力测试的结果成反比。

1G内存默认开启了5个进程。。通过20秒内600并发测试的结果是负载1.5,无失败。

优化后开启了30个进程。。在20秒内600并发测试的结果负载高达8.5,同样无失败。

苍天啊,怎么会这样啊。。测试结果太吓人了啊。。。。。测试环境是军哥lnmp0.9 php5.2 做的测试。这是为什么,难道我是被大多数教程误导了吗?真心求教。

作者: shylocker110    时间: 2014-12-19 06:41
本帖最后由 shylocker110 于 2014-12-19 06:53 编辑

有时间再看看wdcp的安装包。。。。这感觉太可怕了。。此问题在别人的博客里也有同学留言:https://blog.linuxeye.com/380.html
作者: SKIDROW    时间: 2014-12-19 08:57
本帖最后由 SKIDROW 于 2014-12-19 09:00 编辑

PHP 5.2性能就那样,你还想要多快?要快就用PHP 5.4以上的版本。
作者: hablahjeejee    时间: 2014-12-19 09:04
程序如果能在php5.2跑就没得法,如果可以最后换最新的php版本,比如5.4, 5.5 再开apc,/opcache
作者: w3school    时间: 2014-12-19 09:09
20秒内600并发测试,没看懂意思,测试难道只看负载?不看响应时间这些?
作者: 0000000    时间: 2014-12-19 09:38
你只有4核心 跑30个进程 简直了...

作者: 羞涩    时间: 2014-12-19 11:49
结果已经给你了,线程超过了。

作者: _jerryjee    时间: 2014-12-19 12:30
128MB内存只开3个静态线程的撸过。
作者: 醉了    时间: 2014-12-19 17:23
SKIDROW 发表于 2014-12-19 08:57
PHP 5.2性能就那样,你还想要多快?要快就用PHP 5.4以上的版本。

你理解错了。我的意思是php-fpm设置越大,负载能力越差。这句是关键点。
作者: mix    时间: 2014-12-19 17:36
worker_processes 4
小白瞎猜的
作者: foxconndmd    时间: 2014-12-19 17:47
php-fpm不是进程越多越好,CPU性能差光管理进程本身就是很大开销。
作者: 醉了    时间: 2014-12-19 17:49
foxconndmd 发表于 2014-12-19 17:47
php-fpm不是进程越多越好,CPU性能差光管理进程本身就是很大开销。

那这个值要怎么定?
作者: googlebot2    时间: 2014-12-19 18:41
php是cpu密集应用,开多个个进程是对付网络密集应用,对cpu密集没用,
提升cpu能力是核心,
作者: tiane12    时间: 2014-12-19 18:44
同关注这个问题,还有一个问题是,如果访问量一定的情况下,如果你把php-fpm进程设置小了,会不会502?
作者: 灵尘子    时间: 2014-12-19 19:14
关注~
作者: SKIDROW    时间: 2014-12-19 20:33
本帖最后由 SKIDROW 于 2014-12-19 21:08 编辑
醉了 发表于 2014-12-19 17:23
你理解错了。我的意思是php-fpm设置越大,负载能力越差。这句是关键点。


首先PHP5.2的php-fpm并不是很完善,只是作为一个补丁启用而已,并且php-fpm与Web Server的进程管理模式不统一,所以大多数时候仍然是LAMP组合。
并且你这样测试本身就不怎么合理,表面你开了多个php-fpm进程,但是你测试用的是什么页面你也没有说明,是phpinfo,探针,还是Discuz?你也没有说是否开启opcode 缓存如APC、eAccelerator等。
进程越多,管理起来自然就越麻烦,就像现在的Chrome非常占用资源,因为它有很多进程,并且要统一管理,那么就有很多时间浪费在这上面。但是在大多数时候就算一两个Chrome进程崩溃也不会引起整个Chrome崩溃。PHP-FPM开启多个进程是为了能够更好的进行多并发处理,类似于Chrome,就算一个进程出现异常也不会影响其他的进程。你现在只是在20秒内测试600个并发,如果是20秒6000个并发,或者20秒60000个并发,你认为5个进程能否胜任?这就是区别。
你只是认为开得越多负载就越高,那你还是不清楚php-fpm的进程数量的意义。假设你的600个连接平均分到30个进程,挂掉一个,那么你只会收到20个错误,但如果是600个连接分到5个进程,挂掉一个,出问题的连接就大大超过20个。

(, 下载次数: 0)
我在PHP5.5调了30个php-fpm进程,用了500并发去测试Drupal这种复杂的程序,负载也没上4,要么是CPU问题,反正5.2已经是坑了。
作者: 醉了    时间: 2014-12-20 02:01
本帖最后由 醉了 于 2014-12-20 02:15 编辑
SKIDROW 发表于 2014-12-19 20:33
首先PHP5.2的php-fpm并不是很完善,只是作为一个补丁启用而已,并且php-fpm与Web Server的进程管理模式不 ...


学习了,你这个是用php原生的php-fpm运行的。军哥的0.9是采用php-cgi运行的。另外我的测试环境是php5.2+eAccelerator测试wordpress。。。。
要是php只能用5.2的话,毕竟国内有好多老程序是5.2的。是不是采用lamp或者lanmp比lnmp更好呢?求大神解惑。。。
作者: zc035    时间: 2014-12-20 02:05
1G 内存能受得了 30个 线程? 我 一个项目 32G内存只设置了 25 线程。
作者: 醉了    时间: 2014-12-20 02:12
zc035 发表于 2014-12-20 02:05
1G 内存能受得了 30个 线程? 我 一个项目 32G内存只设置了 25 线程。

不是说这个进程是根据内存来定的吗?一个进程耗费20M内存。好多运维的博客都这么写的。。。
作者: zc035    时间: 2014-12-20 02:24
醉了 发表于 2014-12-20 02:12
不是说这个进程是根据内存来定的吗?一个进程耗费20M内存。好多运维的博客都这么写的。。。 ...

一个进程启动消耗20M内存是不错。但是不是说PHP执行不消耗内存。

1G内存最多只能开 8线程。我看来。
作者: 卖女孩的小火柴    时间: 2014-12-20 08:43
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 全球主机交流论坛 (https://loc.xiu.ee/) Powered by Discuz! X3.4