【发布时间】:2012-10-23 14:39:38
【问题描述】:
我有一个运行时间很长的脚本,它正在对大约 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
【问题讨论】:
-
试着把它分成几部分。检查使用的内存,一段时间后似乎正在进行大量交换。
-
性能会在 90 分钟后急剧下降,还是会逐渐下降?无论如何,作为 Apache 孩子,您不应该执行长时间运行的脚本。
-
我同意@MarcB:您不应该通过 Apache 访问它,尤其是因为您可能正在使用 PHP 的 CLI 版本。
-
@MarcB 悬崖边。我想现在我想它实际上并没有使用 apache。我只是用 php index.php 等来调用它。
-
听起来你像 s**t 一样泄漏内存。生活很艰难。死亡和重生是有原因的。如果你找不到你的泄漏,你可以批量处理你的过程来使用童工来做,比如说,1M 记录砖,这样图像关闭/重启就可以解决你的泄漏问题。
标签: php apache codeigniter