免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10434 | 回复: 2
打印 上一主题 下一主题

PHP curl长连接内存耗尽 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-12 11:46 |只看该作者 |倒序浏览
  1. $curl = curl_init();
  2. function http_get($url)
  3. {
  4.         global $curl;
  5.         curl_setopt($curl, CURLOPT_URL, $url);
  6.         curl_setopt($curl, CURLOPT_TIMEOUT, 3);
  7.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  8.         $ctt = curl_exec($curl);               
  9.         return $ctt;                                    
  10. }                                                      
  11. //call http_get
  12. curl_close($curl);
复制代码
这种长连接下,在"call http_get"这里循环调用http_get,会发现php内存使用量持续增长,直到最后进程崩溃。
如果改为短链接,每次调用后都用curl_close释放,则没有这个问题。

有人能解释下吗?给个解决方案更好。谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-10-12 16:47 |只看该作者
你是如何循环的?循环的代码没有,另外变量用过之后要unset

论坛徽章:
0
3 [报告]
发表于 2010-10-12 17:57 |只看该作者
本帖最后由 krrping 于 2010-10-12 17:58 编辑

//call http_get
就是一个for循环不断调用http_get函数,然后用memory_get_usage()打印内存使用量,没有任何其他代码和变量。显示内存是不断增加。
后来我改了下程序,调用若干次(500次)http_get后用curl_close关闭再重新打开一下。
这样程序就稳定了,表现是内存不停增长,curl_close后降到最低,然后再慢慢增长,再降到最低。依次循环。
基本可以判断是curl的问题。我每次抓取的url都不一样,猜测是它做缓存了还是怎样,不知道。
大家可以自己试试。

现在用这种若干次后释放再重新打开的方法,已经可以很好的工作了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP