我有一个非常长的运行脚本,它使用大约3000万个数据库记录进行了大量的工作。每次我使用CLI启动它并让它运行时,它运行起来相当快,因为它正在做的工作量(大约5k记录/分钟)。然而,在大约90分钟后,它会急剧减速,需要2个小时才能完成5k记录。如果我重新启动它,它会再次运行大约90分钟。
Apache日志在放慢速度时没有显示任何内容,我只是不确定要在哪里查看。
在命令行上运行,PHP的最大执行时间应该无关紧要,我已经在CodeIngiter中注释了它将其设置为300的位置;我甚至在脚本的顶部添加了set_time_limit(0)
。
我的数据库是PostgreSQL。
关于在哪里寻找的任何建议?
编辑:好的,肯定似乎是一个记忆问题。但是我正在使用几个数组来缓存结果以进行批量插入和更新,但我之后将它们清除掉,并且在我达到90分钟之前它们被使用了很多次。
有没有办法看到目前在记忆中的内容?
编辑:我不知道这是否是我的另一个90分钟的解决方案,但如果您是有内存问题的CI用户,请查看此http://codeigniter.com/forums/viewthread/140012/#689396
答案 0 :(得分:2)
您可以使用此功能memory_get_usage()
查看您的内存使用情况。
您可以在内存中看到的唯一内容是您已经过delcared的数组或变量。任何已经unset(
),重用或被删除的内容都会被垃圾收集器添加以供删除。
我在当天做了PHP导入脚本,你可能遇到的是内存问题。完成后,请务必清空阵列。
根据您希望在任务中获得多少乐趣,这可能会引起您的兴趣: http://gearman.org/
Gearman提供了一个通用的应用程序框架,可以将工作分配给更适合工作的其他机器或进程。