From 54085508e5a6d7971158771f60845aa293de1d46 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 6 Dec 2015 16:28:28 +0100 Subject: [PATCH 1/3] Double check for maximum number of workers --- include/poller.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/include/poller.php b/include/poller.php index 45740dab62..3b348531c5 100644 --- a/include/poller.php +++ b/include/poller.php @@ -56,12 +56,17 @@ function poller_run(&$argv, &$argc){ // But: Update processes (like the database update) mustn't be killed } - } else - // Sleep two seconds before checking for running processes to avoid having too many workers + } else { + // Checking the number of workers + if (poller_too_much_workers(1)) + return; + + // Sleep four seconds before checking for running processes again to avoid having too many workers sleep(4); + } // Checking number of workers - if (poller_too_much_workers()) + if (poller_too_much_workers(2)) return; $starttime = time(); @@ -114,13 +119,13 @@ function poller_run(&$argv, &$argc){ return; // Count active workers and compare them with a maximum value that depends on the load - if (poller_too_much_workers()) + if (poller_too_much_workers(3)) return; } } -function poller_too_much_workers() { +function poller_too_much_workers($stage) { $queues = get_config("system", "worker_queues"); @@ -144,7 +149,7 @@ function poller_too_much_workers() { $slope = $maxworkers / pow($maxsysload, $exponent); $queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent)); - logger("Current load: ".$load." - maximum: ".$maxsysload." - current queues: ".$active." - maximum: ".$queues, LOGGER_DEBUG); + logger("Current load stage ".$stage.": ".$load." - maximum: ".$maxsysload." - current queues: ".$active." - maximum: ".$queues, LOGGER_DEBUG); } From 9f8da37c99db9b66c164d4fbeb7b4e15bec19d32 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 6 Dec 2015 16:40:31 +0100 Subject: [PATCH 2/3] Move the process check at the beginning of the script --- include/poller.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/include/poller.php b/include/poller.php index 3b348531c5..06a5314a4f 100644 --- a/include/poller.php +++ b/include/poller.php @@ -38,6 +38,10 @@ function poller_run(&$argv, &$argc){ } } + // Checking the number of workers + if (poller_too_much_workers(1)) + return; + if(($argc <= 1) OR ($argv[1] != "no_cron")) { // Run the cron job that calls all other jobs proc_run("php","include/cron.php"); @@ -56,14 +60,9 @@ function poller_run(&$argv, &$argc){ // But: Update processes (like the database update) mustn't be killed } - } else { - // Checking the number of workers - if (poller_too_much_workers(1)) - return; - + } else // Sleep four seconds before checking for running processes again to avoid having too many workers sleep(4); - } // Checking number of workers if (poller_too_much_workers(2)) From fbbba6828b16cffaa6f9c70f5902d98b80678640 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 6 Dec 2015 20:04:33 +0100 Subject: [PATCH 3/3] Some better logging --- include/poller.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/poller.php b/include/poller.php index 06a5314a4f..8c102a66b9 100644 --- a/include/poller.php +++ b/include/poller.php @@ -104,10 +104,10 @@ function poller_run(&$argv, &$argc){ $funcname=str_replace(".php", "", basename($argv[0]))."_run"; if (function_exists($funcname)) { - logger("Process ".getmypid().": ".$funcname." ".$r[0]["parameter"]); + logger("Process ".getmypid()." - ID ".$r[0]["id"].": ".$funcname." ".$r[0]["parameter"]); $funcname($argv, $argc); - logger("Process ".getmypid().": ".$funcname." - done"); + logger("Process ".getmypid()." - ID ".$r[0]["id"].": ".$funcname." - done"); q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($r[0]["id"])); } else