Nginx+php-fpm无法支撑大流量的并发访问?

2013-07-05 11:08:57 +08:00
 kenneth
统计服务器,无法支撑大流量的并发访问,导致php统计程序无法运行。

现在加大pm.max_children可以访问一会,但是php-fpm进程会越来越多,直到内存耗尽。

求解决思路。

Nginx错误日志

connect() failed (110: Connection timed out) while connecting to upstream

php-fpm日志

[05-Jul-2013 02:07:14] NOTICE: [pool www] child 1389 exited with code 0 after 31650.855799 seconds from start
[05-Jul-2013 02:07:14] NOTICE: [pool www] child 1778 started
[05-Jul-2013 02:08:53] NOTICE: [pool www] child 1382 exited with code 0 after 31750.211689 seconds from start
[05-Jul-2013 02:08:53] NOTICE: [pool www] child 1779 started
[05-Jul-2013 02:10:33] NOTICE: [pool www] child 1394 exited with code 0 after 31849.875417 seconds from start
[05-Jul-2013 02:10:33] NOTICE: [pool www] child 1794 started
[05-Jul-2013 02:26:55] NOTICE: [pool www] child 1391 exited with code 0 after 32831.675556 seconds from start
[05-Jul-2013 02:26:55] NOTICE: [pool www] child 1799 started
[05-Jul-2013 02:58:17] NOTICE: [pool www] child 1372 exited with code 0 after 34714.447165 seconds from start
[05-Jul-2013 02:58:17] NOTICE: [pool www] child 1815 started
16145 次点击
所在节点    PHP
25 条回复
skydiver
2013-07-05 11:10:56 +08:00
多少个并发啊
itopidea
2013-07-05 11:17:15 +08:00
我也遇到这个问题,以前55个并发,耗尽1G内存。
akira
2013-07-05 11:20:44 +08:00
你这是多大规模啊
darkyoung
2013-07-05 11:23:39 +08:00
做负载均衡吧
RobinFai
2013-07-05 11:45:13 +08:00
Nginx+php-fpm支撑不起的时候, apache+php也差不多了。
换大内存服务器。改变策略,增加服务器做负载均衡。
soli
2013-07-05 11:47:34 +08:00
55 个并发太少了吧。

是不是达到带宽上限了?也就是瓶颈不在PHP这,而是在带宽?
scourgen
2013-07-05 12:00:38 +08:00
无法运行的原因是什么?内存不够?进程死循环??在没有更多服务器现场数据的情况下,现在只能怀疑是你的程序有问题。

FPM只是一个跑php的载体,如果你的程序有问题,再调整FPM也是没用的。

所以strace一个进程,先看看程序到底在做什么吧
pubby
2013-07-05 12:17:35 +08:00
一味调大进程数最终只会导致整体性能下降

优化程序,请求处理越快越好。

找到瓶颈,如果瓶颈在php本身,那么考虑其它的高并发方案,比如用node.js 或者 golang重写。

如果一台机器达到上限,那就增加机器分流。

ps. 统计这玩意我都是node.js做的,直接写文件,然后后台脚本定时处理日志文件。
GTim
2013-07-05 12:21:51 +08:00
不是吧...这年头还有php-fpm把内存耗尽的...不过没关系...如果可以,做负载均衡把。没条件,把一些可以缓存的东西,先在客户端缓存起来...把一些耗时耗力的部分用纯php改写..还不行,上hidhop...杂七杂八的各种优化方法...

php-fpm进程数最好是根据内存和cpu来设置的..
BOYPT
2013-07-05 12:30:09 +08:00
进程越来越多说明你的php程序太慢,处理不过来。fpm也好apache也好,对慢代码都只有开进程。
qsun
2013-07-05 12:45:33 +08:00
统计服务器 就不要挂php好了,直接/dev/null 然后做 offline 分析
ipconfiger
2013-07-05 13:05:45 +08:00
1G内存玩什么高并发
lqs
2013-07-05 14:01:42 +08:00
『统计服务器,无法支撑大流量的并发访问,导致php统计程序无法运行。』
这句最重要的描述却一笔带过,什么叫『无法支撑』和『无法运行』?

『现在加大pm.max_children可以访问一会』
然后走向了一条错误的道路。
sarices
2013-07-05 14:04:59 +08:00
低内存最好限制一下php-fpm的进程数量
kenneth
2013-07-05 18:11:22 +08:00
我这样尝试的:
1.限制php-fpm进程数量
结果:connect() failed (110: Connection timed out) while connecting to upstream
2.我增加pm.max_children
结果:php-fpm进程不断增加,直到内存没有。

总是网站无法正常访问。

还是不知道如何解决。
ovear
2013-07-05 19:52:50 +08:00
别用lnmp用lanmp,php用apache来跑,这是cgi的通病。大压力下,掉包率很离谱
ovear
2013-07-05 19:53:38 +08:00
这就是所谓的nginx高并发下502的原因。。
felix021
2013-07-06 00:27:48 +08:00
55个并发不至于就给跑死了吧。
APC/eAccelerater/XCache之一装了没?
XDEBUG装了没?看看性能热点是在什么地方。
如果热点是数据库,数据库slowlog看了没,查询都走索引了吗,用memcache/redis做缓存了吗?
lightforce
2013-07-06 00:31:02 +08:00
pm= static or dynamic ?
likuku
2013-07-06 13:03:51 +08:00
统计的任务要作队列,用户提交统计任务=>丢队列,返回让用户等着去,后面统计程序从队列领任务去跑,跑完返回结果。

统计这种要实时返回,数据量大/算法复杂,都不现实。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/74831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX