PHP 脚本导致服务器内存耗尽且无法释放

PHP 脚本导致服务器内存耗尽且无法释放

过去两天我一直在运行一个非常耗资源的脚本。我手动触发调用,它持续了大约 30 分钟,然后停止。昨晚,当内存达到 100% 时,脚本停滞了。

我重启了服务器,这是内存的状态。通常,当只运行网站上托管的单个网站时,内存约为 300mb。

             total       used       free     shared    buffers     cached
Mem:          2048        150       1897          0          0         32
-/+ buffers/cache:        118       1929
Swap:          128          0        128

我今天运行了几次脚本,在脚本运行过程中我一直在检查内存,发现它慢慢地消耗了内存,但脚本运行结束后并没有释放内存。我可以理解脚本运行时内存的峰值,但脚本运行结束后,我将其放置 20 分钟,内存保持不变。

             total       used       free     shared    buffers     cached
Mem:          2048       1522        525          0          0        182
-/+ buffers/cache:       1339        708
Swap:          128          0        128

为什么脚本占用了所有内存并且不释放它?

脚本正在执行的操作如下。它将从数据库表中选择 100 行。然后它将获取数据并从 5 个不同的 RESTful JSON API 中获取数据。其中 3 个 API 仅涉及解析文本并将其插入数据库表。2 个涉及解析文本和复制图像。这些图像被复制到硬盘上,然后我使用 PHP 压缩并重新调整它们的大小。

一旦处理完所有 100 行,脚本就会停止,这就是它的结束。它很密集,但我不明白为什么它完成后没有释放内存。

有人能帮忙吗?我有一个运行 centos 的 Linux VPS,内存为 2GB。

答案1

没有办法确定真正的问题所在。我们需要知道您在脚本中执行的操作。这可能很简单,只需将所有请求放入队列并使用 Cron 逐个处理它们即可。这样,您还可以将某些条目标记为“失败”,然后回头查看为什么这些特定的条目会遇到问题。请提供有关您正在尝试处理的内容的更多信息,以便我们更好地就如何执行该操作提供建议。

相关内容