CURL 性能问题,求助

2014-03-22 03:56:23 +08:00
 info007
最近开了一个交易系统。使用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强很多?
6268 次点击
所在节点    PHP
21 条回复
vibbow
2014-03-22 04:32:34 +08:00
cUrl性能没那么差劲的啊。

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

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

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

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

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

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

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

另问HHVM(FACEBOOK开发的一个开源项目)做服务器。性能很高。不过就是特别容易挂掉。听说是内存泄露的BUG.也有补丁。因为用的是RPM安装的。这种东西用到实际的生产环境中稳定性不知道如何?现在打算是写一个监控程序来做监控HHVM.如果挂掉了马上重启。不知道这样行吗?
info007
2014-03-23 23:30:25 +08:00
还有一个问题就是想做定时任务。是用的LINUX的计划任务。可是LINUX的定时任务最低刷新时间是1分钟。想改成几秒刷新一下的。有没有好的办法?谢谢
setimouse
2014-03-24 06:53:14 +08:00
http长连接使用comet技术。
一秒一次get上线肯定挂。
sivacohan
2014-03-24 23:59:07 +08:00
开发和测试在一台机器上吗?
如果js写的不好的话,cpu消耗也是非常恐怖的

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

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

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

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

© 2021 V2EX