【发布时间】:2010-05-02 20:06:05
【问题描述】:
我编写了一个通过 SSH 和 nohup 运行的 PHP 脚本,旨在处理来自数据库的记录并对其进行处理(例如,处理一些图像,更新一些行)。
它适用于小负载,最多可能有 10k 条记录。我有一些较大的数据集,可以处理大约 40k 条记录(我意识到不是很多,但是当每条记录需要下载和处理多达 50 张图像时,这会增加很多工作量)。
处理较大的数据集可能需要数天时间。有时我会在我的调试日志中看到内存错误,这很清楚——但有时脚本只是看起来“死”了,或者在我身上变成了僵尸。我的调试日志的尾部刚刚停止,没有错误消息,nohup 日志的尾部没有错误,并且进程仍然显示在 ps 列表中,看起来像这样--
26075 分/0 S 745:01 /usr/bin/php ./import.php
但没有完成任何工作。
谁能给我一些关于为什么进程会退出的想法?据我所知,显而易见的事情(如 php 脚本超时和内存问题)并不是一个因素。
感谢任何提示
PS--这是托管在 Godaddy VDS 上(不是我的选择)。我有点怀疑 godaddy 有某种限制可能会影响我,尽管我在代码中添加了哪些覆盖(例如 set_time_limit(0);)。
【问题讨论】:
-
(1) 你不能把处理分成更小的块吗? (2) 为什么用 nohup 代替 screen?
-
好吧,它一次运行 500 条记录。我敢肯定还有其他策略来分担负载,但这似乎是合理的,只是耗时。初始导入后,记录更新要小得多且易于管理。我已经阅读过有关屏幕的信息,但我没有使用它的经验——使用屏幕有什么好处?谢谢