Merge pull request #2329 from annando/1602-poller-db

Poller: Check the number of used database connections
This commit is contained in:
Tobias Diekershoff 2016-02-09 07:36:39 +01:00
commit 3c97a6703c
2 changed files with 47 additions and 0 deletions

View file

@ -509,6 +509,16 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
$arr['inform'] = ((x($arr,'inform')) ? trim($arr['inform']) : ''); $arr['inform'] = ((x($arr,'inform')) ? trim($arr['inform']) : '');
$arr['file'] = ((x($arr,'file')) ? trim($arr['file']) : ''); $arr['file'] = ((x($arr,'file')) ? trim($arr['file']) : '');
if (($arr['author-link'] == "") AND ($arr['owner-link'] == "")) {
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5);
foreach ($trace AS $func)
$function[] = $func["function"];
$function = implode(", ", $function);
logger("Both author-link and owner-link are empty. Called by: ".$function, LOGGER_DEBUG);
}
if ($arr['plink'] == "") { if ($arr['plink'] == "") {
$a = get_app(); $a = get_app();
$arr['plink'] = $a->get_baseurl().'/display/'.urlencode($arr['guid']); $arr['plink'] = $a->get_baseurl().'/display/'.urlencode($arr['guid']);

View file

@ -26,6 +26,9 @@ function poller_run(&$argv, &$argc){
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
if (poller_max_connections_reached())
return;
$load = current_load(); $load = current_load();
if($load) { if($load) {
$maxsysload = intval(get_config('system','maxloadavg')); $maxsysload = intval(get_config('system','maxloadavg'));
@ -117,6 +120,40 @@ function poller_run(&$argv, &$argc){
} }
/**
* @brief Checks if the number of database connections has reached a critical limit.
*
* @return bool Are more than 3/4 of the maximum connections used?
*/
function poller_max_connections_reached() {
$r = q("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
if (!$r)
return false;
$max = intval($r[0]["Value"]);
if ($max == 0)
return false;
$r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
if (!$r)
return false;
$connected = intval($r[0]["Value"]);
if ($connected == 0)
return false;
$level = $connected / $max;
logger("Connection usage: ".$connected."/".$max, LOGGER_DEBUG);
if ($level < (3/4))
return false;
logger("Maximum level (3/4) of connections reached: ".$connected."/".$max);
return true;
}
/** /**
* @brief fix the queue entry if the worker process died * @brief fix the queue entry if the worker process died
* *