php cli脚本挂起,没有消息

时间:2010-05-02 20:06:05

标签: mysql linux php

我编写了一个通过SSH和nohup运行的PHP脚本,用于处理数据库中的记录并对其进行处理(例如,处理一些图像,更新一些行)。

它适用于小负载,最多可达10k记录。我有一些较大的数据集可以处理大约4万条记录(不是很多,我意识到,但是当每条记录需要下载和处理多达50张图像时,它会增加很多工作量。)

较大的数据集可能需要数天才能处理。有时我会在调试日志中看到内存错误,这些错误已经足够清楚了 - 但有时候脚本似乎“死”或者僵尸在我身上。调试日志的尾部停止,没有错误消息,nohup日志的尾部没有错误,并且进程仍然显示在ps列表中,看起来像这样 -
    26075 pts / 0 S 745:01 / usr / bin / php ./import.php
但是没有工作要做。

任何人都可以给我一些关于过程为什么会退出的想法吗?就我所知,显而易见的事情(如php脚本超时和内存问题)不是一个因素。

感谢您提供任何提示

PS--这是托管在一个godaddy VDS(不是我的选择)。我有点怀疑godaddy有一些限制,可能会对我产生影响,尽管我在代码中覆盖了什么(例如set_time_limit(0);)。

1 个答案:

答案 0 :(得分:2)

很可能是OOM killer。如果你真的,真的 真的想要超出其影响力,因为 root ,让您的流程将-17写入{{ 1}}。 警告:内核通常知道的更好。躲避OOM杀手实际上可能会破坏您尝试查询的相同RDBMS。这将是一个多么恶性循环:)

您可能(而不是)希望根据您从/proc/self/oom_adj/proc/loadavg读取的内容错开查询。如果您增加负载或以指数方式交换,则需要退出,尤其是作为后台进程:)

此外,在您运行时监控IOWAIT。与系统启动时相比,这可以从/proc/meminfo取平均值。当你开始和进步时请注意它。

不幸的是,被称为OOM杀手的连环杀手并没有维护除了解析内核消息之外可以访问的主体数。

或者,您的cron作业不断达到/proc/stat分配的堆量。无论哪种方式,您的工作需要在适当的时候退出,或者在做任何工作之前防止其自身死亡(如上所述)。

作为旁注,您可能不应该在共享主机上做您正在做的事情。如果它那么大,是时候获得一个VPS(至少)你可以控制什么过程来做什么。

相关问题