服务器代码产生过多的php实例

时间:2018-08-20 03:12:26

标签: php cron silverstripe

我有一个服务器,该服务器的动作由频繁的cron工作触发。
这是在Silverstripe(4.0)上构建的php应用程序。
我面临的问题是php进程保持活动状态,并且还保持数据库连接打开。这意味着几天后,一旦SQL停止接受新连接,站点将完全停止工作。

系统对cron作业有两项任务;

一个人将一个庞大的CSV文件放入一个较小的子文件中,然后将其导入数据库。这个使用锁文件来防止它运行到先前运行的实例中。我不太确定这是否有效。

第二个任务处理所有已批量更新的记录。

这两个都是超载的原因,但我不确定如何缩小超载。
诊断问题根源的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

就调试而言,这就像使用xdebugkcachegrind对应用程序进行性能分析的任何其他任务一样。为了确保进程不会运行太长时间,您可以将PHP.ini的{​​{3}}限制为CLI的限制。

然后让CLI进程运行很长时间,但只需添加足够的时间来设置每行的最大执行时间:

$allowed_seconds_per_row = 3;
foreach($rows_to_process as $row){
    set_time_limit($allowed_seconds_per_row);
    $this->process($row);
}

您也可以max_execution_time在脚本结束时记录状态。

内存可能是导致故障和调试集中在register a shutdown function上的关键原因,并且可以根据需要由memory usage变量数据进行控制。