过去两天我一直在运行一个非常耗资源的脚本。我手动触发调用,它持续了大约 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 逐个处理它们即可。这样,您还可以将某些条目标记为“失败”,然后回头查看为什么这些特定的条目会遇到问题。请提供有关您正在尝试处理的内容的更多信息,以便我们更好地就如何执行该操作提供建议。