From df337e57d130ceb370e5269f0052254c873b27a5 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 3 Jun 2016 23:10:23 +0200 Subject: [PATCH] Quit when processlist is too long --- include/dbm.php | 4 +++- include/poller.php | 14 ++++++++++---- index.php | 10 ++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/include/dbm.php b/include/dbm.php index f68987c235..1e1c3706e0 100644 --- a/include/dbm.php +++ b/include/dbm.php @@ -15,12 +15,14 @@ class dbm { // updating $statelist = ""; + $processes = 0; foreach ($states AS $state => $usage) { if ($statelist != "") $statelist .= ", "; $statelist .= $state.": ".$usage; + ++$processes; } - return($statelist); + return(array("list" => $statelist, "amount" => $processes)); } } ?> diff --git a/include/poller.php b/include/poller.php index 714d4c537c..45dc332e17 100644 --- a/include/poller.php +++ b/include/poller.php @@ -28,8 +28,11 @@ function poller_run(&$argv, &$argc){ }; $processlist = dbm::processlist(); - if ($processlist != "") - logger("Processlist: ".$processlist, LOGGER_DEBUG); + if ($processlist["list"] != "") { + logger("Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + if ($processlist["amount"] > 5) + return; + } if (poller_max_connections_reached()) return; @@ -66,8 +69,11 @@ function poller_run(&$argv, &$argc){ // Log the type of database processes $processlist = dbm::processlist(); - if ($processlist != "") - logger("Processlist: ".$processlist, LOGGER_DEBUG); + if ($processlist["amount"] != "") { + logger("Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + if ($processlist["amount"] > 5) + return; + } // Constantly check the number of available database connections to let the frontend be accessible at any time if (poller_max_connections_reached()) diff --git a/index.php b/index.php index ec72771341..a25c6dc776 100644 --- a/index.php +++ b/index.php @@ -55,8 +55,14 @@ if(!$install) { load_config('system'); $processlist = dbm::processlist(); - if ($processlist != "") - logger("Processlist: ".$processlist, LOGGER_DEBUG); + if ($processlist["list"] != "") { + logger("Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + + // More than 20 running database processes? + // The system is too busy, so quit. + if ($processlist["amount"] > 20) + system_unavailable(); + } $maxsysload_frontend = intval(get_config('system','maxloadavg_frontend')); if($maxsysload_frontend < 1)