Merge pull request #2329 from annando/1602-poller-db
Poller: Check the number of used database connections
This commit is contained in:
commit
3c97a6703c
2 changed files with 47 additions and 0 deletions
|
@ -509,6 +509,16 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
$arr['inform'] = ((x($arr,'inform')) ? trim($arr['inform']) : '');
|
||||
$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'] == "") {
|
||||
$a = get_app();
|
||||
$arr['plink'] = $a->get_baseurl().'/display/'.urlencode($arr['guid']);
|
||||
|
|
|
@ -26,6 +26,9 @@ function poller_run(&$argv, &$argc){
|
|||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
};
|
||||
|
||||
if (poller_max_connections_reached())
|
||||
return;
|
||||
|
||||
$load = current_load();
|
||||
if($load) {
|
||||
$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
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue