php一个定时任务,内存占用一直增长,有什么好的测试方法测出问题出在哪里吗?
PHPz
PHPz 2017-04-11 09:00:56
0
7
426

我是有个php 定时任务,里面是我一次从数据库取1w条数据,处理,完之后再写到数据库。

现在的问题是,每处理1w条数据,内存占用一直在增长,直到超出限制,而不是一直在这1w条所需内存的量上下浮动。

处理好5、6w左右就需要1G多内存了,然后就超出了限制。

我里面处理完上一批数据,这一批的变量都是重新赋值的。不应该一直增长啊。

有什么好办法可以调试出问题出在哪里吗?

妹的,是zend db库有问题。

PHPz
PHPz

学习是最好的投资!

membalas semua(7)
Ty80

1.将1W条数据,修改为每次获取100条处理。
2.set_time_limit(0)设置下脚步时长
3.每分钟执行一次脚步,每次少量获取

阿神

如果使用了遍历:

php 5.5+

遍历中加关键字yield

减少中间变量

小葫芦
  1. 循环几次后 print_r($GLOBALS); 看看变量是否有增长,如果有 应该unset掉无用的

  2. 如果以上没有问题 那么看看mysql连接问题,建议不要长期连接mysql做循环查询,最好是一次性全部拿出来。随着查询越多,php内存会越来越大。这时应该free_result或断开或销毁进程
    还有 加参数 -d menory_limit=1g

迷茫

建议使用workerman swoole 的定时任务功能

左手右手慢动作

不知道你读数据库时候用的什么链接方式,比如有mysql_connect和mysql_pconnect,如果是长链接访问的,可以尝试下别用长链接访问;另外,请贴出关键代码结合代码分析。这种问题很像是C里面的内存泄漏。

巴扎黑

首先你用php做定时任务就不科学,估计没人有勇气这样做

伊谢尔伦

定时器比较常用的应该还是linux crontab。

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan