我是有个php 定时任务,里面是我一次从数据库取1w条数据,处理,完之后再写到数据库。
现在的问题是,每处理1w条数据,内存占用一直在增长,直到超出限制,而不是一直在这1w条所需内存的量上下浮动。
处理好5、6w左右就需要1G多内存了,然后就超出了限制。
我里面处理完上一批数据,这一批的变量都是重新赋值的。不应该一直增长啊。
有什么好办法可以调试出问题出在哪里吗?
妹的,是zend db库有问题。
我是有个php 定时任务,里面是我一次从数据库取1w条数据,处理,完之后再写到数据库。
现在的问题是,每处理1w条数据,内存占用一直在增长,直到超出限制,而不是一直在这1w条所需内存的量上下浮动。
处理好5、6w左右就需要1G多内存了,然后就超出了限制。
我里面处理完上一批数据,这一批的变量都是重新赋值的。不应该一直增长啊。
有什么好办法可以调试出问题出在哪里吗?
妹的,是zend db库有问题。
循环几次后 print_r($GLOBALS); 看看变量是否有增长,如果有 应该unset掉无用的
如果以上没有问题 那么看看mysql连接问题,建议不要长期连接mysql做循环查询,最好是一次性全部拿出来。随着查询越多,php内存会越来越大。这时应该free_result或断开或销毁进程
还有 加参数 -d menory_limit=1g
不知道你读数据库时候用的什么链接方式,比如有mysql_connect和mysql_pconnect,如果是长链接访问的,可以尝试下别用长链接访问;另外,请贴出关键代码结合代码分析。这种问题很像是C里面的内存泄漏。
2 回答1.5k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
2 回答959 阅读✓ 已解决
2 回答1k 阅读
1 回答905 阅读
1 回答868 阅读
1 回答859 阅读
1.将1W条数据,修改为每次获取100条处理。
2.set_time_limit(0)设置下脚步时长
3.每分钟执行一次脚步,每次少量获取