diff --git a/include/dbm.php b/include/dbm.php index 1e1c3706e0..d588b2f76a 100644 --- a/include/dbm.php +++ b/include/dbm.php @@ -4,23 +4,24 @@ class dbm { $r = q("SHOW PROCESSLIST"); $s = array(); + $processes = 0; $states = array(); foreach ($r AS $process) { $state = trim($process["State"]); - if (!in_array($state, array("", "init", "statistics"))) + if (!in_array($state, array("", "init", "statistics"))) { ++$states[$state]; + ++$processes; + } } // query end // Sending data // updating $statelist = ""; - $processes = 0; foreach ($states AS $state => $usage) { if ($statelist != "") $statelist .= ", "; $statelist .= $state.": ".$usage; - ++$processes; } return(array("list" => $statelist, "amount" => $processes)); } diff --git a/include/poller.php b/include/poller.php index 45dc332e17..9e7080e642 100644 --- a/include/poller.php +++ b/include/poller.php @@ -29,9 +29,16 @@ function poller_run(&$argv, &$argc){ $processlist = dbm::processlist(); if ($processlist["list"] != "") { - logger("Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); - if ($processlist["amount"] > 5) + logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + + $max_processes = get_config('system', 'max_processes_backend'); + if (intval($max_processes) == 0) + $max_processes = 5; + + if ($processlist["amount"] > $max_processes) { + logger("Processcheck: Maximum number of processes for backend tasks (".$max_processes.") reached.", LOGGER_DEBUG); return; + } } if (poller_max_connections_reached()) @@ -70,9 +77,16 @@ function poller_run(&$argv, &$argc){ // Log the type of database processes $processlist = dbm::processlist(); if ($processlist["amount"] != "") { - logger("Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); - if ($processlist["amount"] > 5) + logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + + $max_processes = get_config('system', 'max_processes_backend'); + if (intval($max_processes) == 0) + $max_processes = 5; + + if ($processlist["amount"] > $max_processes) { + logger("Processcheck: Maximum number of processes for backend tasks (".$max_processes.") reached.", LOGGER_DEBUG); return; + } } // Constantly check the number of available database connections to let the frontend be accessible at any time diff --git a/index.php b/index.php index a25c6dc776..17258fd0ab 100644 --- a/index.php +++ b/index.php @@ -45,7 +45,7 @@ require_once("include/dbm.php"); if(!$install) { $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); - unset($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); /** * Load configs from db. Overwrite configs from .htconfig.php @@ -56,12 +56,17 @@ if(!$install) { $processlist = dbm::processlist(); 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(); + logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + + $max_processes = get_config('system', 'max_processes_frontend'); + if (intval($max_processes) == 0) + $max_processes = 20; + + if ($processlist["amount"] > $max_processes) { + logger("Processcheck: Maximum number of processes for frontend tasks (".$max_processes.") reached.", LOGGER_DEBUG); + return; + } } $maxsysload_frontend = intval(get_config('system','maxloadavg_frontend')); @@ -453,9 +458,9 @@ if($a->is_mobile || $a->is_tablet) { $link = 'toggle_mobile?off=1&address=' . curPageURL(); } $a->page['footer'] = replace_macros(get_markup_template("toggle_mobile_footer.tpl"), array( - '$toggle_link' => $link, - '$toggle_text' => t('toggle mobile') - )); + '$toggle_link' => $link, + '$toggle_text' => t('toggle mobile') + )); } /**