Nginx+php-fpm无法支撑大流量的并发访问? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kenneth
V2EX    PHP

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

  •  
  •   kenneth 2013-07-05 11:08:57 +08:00 16575 次点击
    这是一个创建于 4482 天前的主题,其中的信息可能已经有所发展或是发生改变。
    统计服务器,无法支撑大流量的并发访问,导致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-201 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
    25 条回复    2014-07-07 10:37:25 +08:00
    skydiver
        1
    skydiver  
       2013-07-05 11:10:56 +08:00
    多少个并发啊
    itopidea
        2
    itopidea  
       2013-07-05 11:17:15 +08:00
    我也遇到这个问题,以前55个并发,耗尽1G内存。
    akira
        3
    akira  
       2013-07-05 11:20:44 +08:00
    你这是多大规模啊
    darkyoung
        4
    darkyoung  
       2013-07-05 11:23:39 +08:00
    做负载均衡吧
    RobinFai
        5
    RobinFai  
       2013-07-05 11:45:13 +08:00
    Nginx+php-fpm支撑不起的时候, apache+php也差不多了。
    换大内存服务器。改变策略,增加服务器做负载均衡。
    soli
        6
    soli  
       2013-07-05 11:47:34 +08:00
    55 个并发太少了吧。

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

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

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

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

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

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

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

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

    『现在加大pm.max_children可以访问一会』
    然后走向了一条错误的道路。
    sarices
        14
    sarices  
       2013-07-05 14:04:59 +08:00
    低内存最好限制一下php-fpm的进程数量
    kenneth
        15
    kenneth  
    OP
       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
        16
    ovear  
       2013-07-05 19:52:50 +08:00
    别用lnmp用lanmp,php用apache来跑,这是cgi的通病。大压力下,掉包率很离谱
    ovear
        17
    ovear  
       2013-07-05 19:53:38 +08:00
    这就是所谓的nginx高并发下502的原因。。
    felix021
        18
    felix021  
       2013-07-06 00:27:48 +08:00
    55个并发不至于就给跑死了吧。
    APC/eAccelerater/XCache之一装了没?
    XDEBUG装了没?看看性能热点是在什么地方。
    如果热点是数据库,数据库slowlog看了没,查询都走索引了吗,用memcache/redis做缓存了吗?
    lightforce
        19
    lightforce  
       2013-07-06 00:31:02 +08:00
    pm= static or dynamic ?
    likuku
        20
    likuku  
       2013-07-06 13:03:51 +08:00
    统计的任务要作队列,用户提交统计任务=>丢队列,返回让用户等着去,后面统计程序从队列领任务去跑,跑完返回结果。

    统计这种要实时返回,数据量大/算法复杂,都不现实。
    hitsmaxft
        21
    hitsmaxft  
       2013-07-06 17:22:49 +08:00
    你的这种情况, 我最近也遇到, fpm没有可用进程, 不断启用新的进程, 但是新进行往往都没有提供服务. 最后到达最大子进程数, 而能够正常服务的进程又到达访问次数上限, 最后所有fpm下挂载的进程都不可用.

    结果就是 nginx 连不上 fpm, fpm挂着一堆不可用的进程.

    不过我还没定位到故障原因, 临时解决方案就是重启fpm
    msg7086
        22
    msg7086  
       2013-07-06 19:37:06 +08:00
    我以前在一台VPS上试跑过统计服务。nginx+php-fpm大概可以承受150req/s。

    后来改用离线处理法,把nginx的access log写入文件里,用cron每分钟mv + kill -USR + 分析日志文件后更新memcache里的数据,然后nginx直接relay到memcache里取数据返回。

    这种架构可以轻松撑起500req+/s的访问。

    双核256M内存VPS实测。
    kenneth
        23
    kenneth  
    OP
       2013-07-06 19:50:02 +08:00   1
    @hitsmaxft 你描述的很清晰,我们遇到了一样的问题。目前我也没有解决,但是会一一尝试大家都建议。
    hitsmaxft
        24
    hitsmaxft  
       2013-07-06 20:18:00 +08:00
    @kenneth 我看大伙的说法都是觉得phpfpm服务能力达不到当前并发的水平.

    但是我感觉问题的关键并不是php业务的性能问题. 因为发生问题的时间都在深夜流量低谷, 而不是流量高峰.
    atonst
        25
    atonst  
       2014-07-07 10:37:25 +08:00
    目前也遇到这种情况,strace 进程 一直超时
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1123 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:33 PVG 01:33 LAX 10:33 JFK 13:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86