CURL 性能问题,求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
info007
V2EX    PHP

CURL 性能问题,求助

  •  
  •   info007 2014 年 3 月 22 日 7103 次点击
    这是一个创建于 4417 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近开了一个交易系统。使用THINKPHP开发的。多层结构,前端html+php, 中间层PHP 后端直接数据库
    前端和中层使用JSON通讯。

    使用了CURL 通过HTTP调用中间层返回的JSON数据进行前台展示

    现在在交易界面需要实时刷新。用了JQUERY来的GET来调前端的PHP。然后用1秒刷新一次。

    现在问题是 自己测试。没开几个页面。CPU就占用非常高。有5个PHP-CGI的进程。用的是NGINX。


    现在是怀疑是用CURL的原因才导致CPU占用率暴涨。因为只有以前写采集程序的时候用到了CURL,结果被虚拟主机商封了多次。如果现在不用CURL

    那如何调用中间层返回的JSON数据。。

    求大神指点。

    CURL在实际项目中使用的性能如何?如果现在前端不用CURL。直接连MYSQL数据库,会不会性能比CURL强很多?
    21 条回复    1970-01-01 08:00:00 +08:00
    vibbow
        1
    vibbow  
       201 年 3 月 22 日
    cUrl性能没那么差劲的啊。

    采集封账号是因为采集写入数据库时特别耗CPU/硬盘,不是cUrl的问题。

    请检查是不是你框架的性能太低了,毕竟用框架的话有那么多路由等等的东西需要处理。
    vibbow
        2
    vibbow  
       2014 年 3 月 22 日   1
    还有请检查session锁的问题。
    a2z
        3
    a2z  
       2014 年 3 月 22 日
    curl性能很好啊,我用curl multi写的扫描器能开200个线程都不卡。
    你用curl的时候没有把整个thinkphp框架都include了吧?
    yakczh
        4
    yakczh  
       2014 年 3 月 22 日
    写个单独的php脚本 里面只包含curl,运行一下,看cpu占用多少
    2code
        5
    2code  
       2014 年 3 月 22 日
    1) 机器会不会太差?
    2) curl 抓取的内容是否要缓存一下,是否必要每次都重新抓?
    3) 考虑换一种方式做实时刷新,不要用ajax轮询
    KKKKale
        6
    KKKKale  
       2014 年 3 月 22 日 via iPad
    curl的性能很好的,查查别的原因吧
    Lax
        7
    Lax  
       2014 年 3 月 22 日
    @yakczh +1

    好不好一测便知,别人的经验不一定适合你
    info007
        8
    info007  
    OP
       2014 年 3 月 22 日
    @2code 已经使用了缓存。还有其它的做实时刷新的方法吗。求教。我想用PHP做HTTP长连接。不知道如何下手。请教
    info007
        9
    info007  
    OP
       2014 年 3 月 22 日
    昨天把PHP版本更新到5.3好像性能上去了很多。原来是5.2的。用AB做压力测试1000并发CPU不到9%
    info007
        10
    info007  
    OP
       2014 年 3 月 22 日
    @vibbow 请问SESSION锁,如何解决?
    wwek
        11
    wwek  
       2014 年 3 月 22 日
    还用虚拟主机?
    wwek
        12
    wwek  
       2014 年 3 月 22 日
    楼主可以采用 如果判断支持html 5 用websockt 做实时信息。
    如果低版本的 可以用flash做兼容

    你这个性能问题。继续优化下代码。 实在是扛不住 。加机器群集啊。
    wwek
        13
    wwek  
       2014 年 3 月 22 日
    还有 mysql不是给你做高并发用的。 请加上redis之类
    pubby
        14
    pubby  
       2014 年 3 月 22 日
    访问量大的话,CPU高很正常啊。

    楼主没交代实际的访问压力。

    还有找瓶颈的话建议开xdebug,使用profile看看具体分析报告。

    当然xdebug会影响性能,生产环境建议单独部署一个开xdebug的环境,然后通过前端倒入一定比例的流量进行测试分析。
    yakczh
        15
    yakczh  
       2014 年 3 月 23 日
    netstat -an |grep 'ESTABLISHED' |grep 'tcp' |wc -l
    看一下连接数是多少?
    heyli
        16
    heyli  
       2014 年 3 月 23 日
    用了JQUERY来的GET来调前端的PHP。然后用1秒刷新一次
    这才是要命的地方 前端显示数据的PHP文件建议直接从redis读数据 后台有个守护进程负责刷新redis
    有能力的话建议长连接
    https://github.com/ideawu/icomet
    https://github.com/wandenberg/nginx-push-stream-module
    info007
        17
    info007  
    OP
       2014 年 3 月 23 日
    忘记提了。我最新端PHP的地方是用了MEMCACHE来缓存的。如果有数据就直接显示出来。如果没有数据才会去调用CURL读中间层的数据。中间层和后端数据库没有加缓存。本来是在中间层和数据库之间加缓存的。后来改成了前端加缓存。这样前端就减少了和中间层的通信。请问这样合理吗?

    另问HHVM(FACEBOOK开发的一个开源项目)做服务器。性能很高。不过就是特别容易挂掉。听说是内存泄露的BUG.也有补丁。因为用的是RPM安装的。这种东西用到实际的生产环境中稳定性不知道如何?现在打算是写一个监控程序来做监控HHVM.如果挂掉了马上重启。不知道这样行吗?
    info007
        18
    info007  
    OP
       2014 年 3 月 23 日
    还有一个问题就是想做定时任务。是用的LINUX的计划任务。可是LINUX的定时任务最低刷新时间是1分钟。想改成几秒刷新一下的。有没有好的办法?谢谢
    setimouse
        19
    setimouse  
       2014 年 3 月 24 日 via iPad
    http长连接使用comet技术。
    一秒一次get上线肯定挂。
    sivacohan
        20
    sivacohan  
    PRO
       2014 年 3 月 24 日
    开发和测试在一台机器上吗?
    如果js写的不好的话,cpu消耗也是非常恐怖的
    info007
        21
    info007  
    OP
       2014 年 3 月 25 日
    用HHVM做服务器一堆坑啊。会在/tmp目录产生很多空SESSION。。。还没跑一会呢。就把服务器给弄挂了。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1300 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 59ms UTC 17:22 PVG 01:22 LAX 10:22 JFK 13:22
    Do have faith in what you're doing.
    ubao msn 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