僵尸进程停止时会有限制吗?

时间:2016-09-16 07:16:42

标签: php mysql cron zombie-process

我有一个动态cron计划模块。使用该模块,用户可以设置一个cron。基本上有很多用户想要导出的数据库字段。因此,用户可以选择要导出的字段并安排cron。

为了管理所有这些动态crons,我有一个静态cron,它将每小时运行并检查是否有任何动态cron运行,如果cron发现它将执行那些crons。

现在有很多crons,所以我使用了一种黑客来同时运行所有的crons。

<?php
public function actionCrondynamic()
{
    while(ob_get_level()) ob_end_clean();
    header('Connection: close');
    ignore_user_abort();
    ob_start();
    $size = ob_get_length();
    header("Content-Length: $size");
    ob_end_flush();
    flush();

    $AllDynCronmodel = Cron::model()->findAllByAttributes();
    foreach($AllDynCronmodel as $mk=>$SingleCronModel)
    {   
        $CronId=$SingleCronModel->id;
        if(is_numeric($CronId))
        {
            $curl_url     = $this->createAbsoluteUrl('cron/runcron') . "&id=$CronId";
            $chu = curl_init();
            curl_setopt($chu, CURLOPT_URL, $curl_url);
            curl_setopt($chu, CURLOPT_FRESH_CONNECT, true);
            curl_exec($chu);
            curl_close($chu);
        }
    }
}


public function actionRuncron($id)
{
        /* close connection start */
        while(ob_get_level()) ob_end_clean();
        header('Connection: close');
        ignore_user_abort();
        ob_start();
        $size = ob_get_length();
        header("Content-Length: $size");
        ob_end_flush();
        flush();
        /* Close conncetion End  */
        set_time_limit(7200);

        //Other code
        //........................
        //........................
}
?>

现在有很多复杂的数据。所以大多数复杂的crons需要20-60分钟。所以假设有30个动态crons,那么将会有30个僵尸进程被创建。现在问题是有些时候多达10多个crons无法完成执行,我无法找到原因。

当僵尸进程自动终止时有限制吗?或某种瓶颈或其他什么?

注意:我使用的是innodb mysql引擎。

0 个答案:

没有答案