1

我有一个运行时间很长的脚本,它正在对大约 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

4

1 回答 1

2

您可以使用此功能查看您的内存使用情况memory_get_usage()

您可以在内存中看到的唯一内容是您已删除的数组或变量。任何已被unset()、重用或无效的内容都会被垃圾收集器添加以供删除。


我以前做过 PHP 导入脚本,你可能遇到的是内存问题。完成后请务必清空数组。

根据您想在任务中获得多少乐趣,这可能会激发您的兴趣: http: //gearman.org/

Gearman 提供了一个通用的应用程序框架,将工作外包给其他更适合完成工作的机器或进程。

于 2012-10-23T14:47:57.317 回答