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)