V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
info007
V2EX  ›  PHP

CURL 性能问题,求助

  •  
  •   info007 · 2014-03-22 03:56:23 +08:00 · 6412 次点击
    这是一个创建于 3892 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近开了一个交易系统。使用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  
       2014-03-22 04:32:34 +08:00
    cUrl性能没那么差劲的啊。

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

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

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

    你这个性能问题。继续优化下代码。 实在是扛不住 。加机器群集啊。
    wwek
        13
    wwek  
       2014-03-22 18:03:28 +08:00
    还有 mysql不是给你做高并发用的。 请加上redis之类·
    pubby
        14
    pubby  
       2014-03-22 22:47:04 +08:00
    访问量大的话,CPU高很正常啊。

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

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

    当然xdebug会影响性能,生产环境建议单独部署一个开xdebug的环境,然后通过前端倒入一定比例的流量进行测试分析。
    yakczh
        15
    yakczh  
       2014-03-23 10:04:27 +08:00
    netstat -an |grep 'ESTABLISHED' |grep 'tcp' |wc -l
    看一下连接数是多少?
    heyli
        16
    heyli  
       2014-03-23 14:00:49 +08:00
    用了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-03-23 23:25:52 +08:00
    忘记提了。我最新端PHP的地方是用了MEMCACHE来缓存的。如果有数据就直接显示出来。如果没有数据才会去调用CURL读中间层的数据。中间层和后端数据库没有加缓存。本来是在中间层和数据库之间加缓存的。后来改成了前端加缓存。这样前端就减少了和中间层的通信。请问这样合理吗?

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