php 循环 内存泄漏,解决PHP内存泄漏问题

我有一个PHP脚本无限期地运行(无限主事件循环)处理来自Twitter的传入推文流并将它们存储到MySQL.但是,我似乎无法控制其内存使用量.我找到了3种测量内存使用量的方法:

> memory_get_usage() – 报告大约4.0 MB

> memory_get_usage(true) – 报告大约7.5 MB

> exec(“ps -o rss -p”.getmypid(),$memOutput); – 报告线性增加的数字,在60分钟或更短的时间内快速增长到数百MB,并继续占用内存,直到脚本被强制终止.

我的问题:

1)这三项措施之间的实际区别是什么?

但主要是:

2)如果前两个相对恒定,这意味着什么,但第三种方法是如此严重失控?

FWIW,我正在使用PHP 5.3和Zend Framework 1.x以及很多Zend_Db活动.脚本在CLI SAPI下运行. Zend_Db_Profiler未被使用.我还有第二个无限运行的脚本,根本不使用数据库,内存使用量是不变的.所以它似乎与数据库相关,也许是我的PHP设置正在使用的MySQL扩展,或者Zend_Db.我在自己的代码中花了很大的力气,以避免不小心缓存对象,虽然我没有用Zend的代码本身做到这一点.

我已经尝试让我的脚本调用gc_enable(),并定期运行gc_collect_cycles(),但这没有帮助.

有任何想法吗?

编辑我打算尽快剖析这段代码,但同时我注意到即使我的脚本没有触及数据库,也会泄漏内存.但是他们以更慢的速度这样做,只有在比较几天的内存使用情况时才会变得明显.

解决方法:

好吧,我不能指出你在这里的确切答案,因为你需要自己进行分析.根据你的说法,它似乎指向Zend的数据库层,但除非你对此进行分析,否则你无法确定.

标签:php,mysql,memory-leaks,zend-framework

来源: https://codeday.me/bug/20190703/1368222.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值