if (poller_max_connections_reached())
return;
- $load = current_load();
- if($load) {
- $maxsysload = intval(get_config('system','maxloadavg'));
- if($maxsysload < 1)
- $maxsysload = 50;
-
- if(intval($load) > $maxsysload) {
- logger('system: load ' . $load . ' too high. poller deferred to next scheduled run.');
- return;
- }
- }
+ if (App::maxload_reached())
+ return;
// Checking the number of workers
if (poller_too_much_workers(1)) {
$used = count($r);
logger("Connection usage (user values): ".$used."/".$max, LOGGER_DEBUG);
- } else {
- // Since there are no user specific limitations we will now check for the system values
- $r = q("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
- if (!$r)
- return false;
- $max = intval($r[0]["Value"]);
- if ($max == 0)
- return false;
+ $level = $used / $max;
- $r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
- if (!$r)
- return false;
+ if ($level >= (3/4)) {
+ logger("Maximum level (3/4) of user connections reached: ".$used."/".$max);
+ return true;
+ }
+ }
- $used = intval($r[0]["Value"]);
- if ($used == 0)
- return false;
+ // We will now check for the system values.
+ // This limit could be reached although the user limits are fine.
+ $r = q("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
+ if (!$r)
+ return false;
- logger("Connection usage (system values): ".$used."/".$max, LOGGER_DEBUG);
- }
+ $max = intval($r[0]["Value"]);
+ if ($max == 0)
+ return false;
+
+ $r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
+ if (!$r)
+ return false;
+
+ $used = intval($r[0]["Value"]);
+ if ($used == 0)
+ return false;
+
+ logger("Connection usage (system values): ".$used."/".$max, LOGGER_DEBUG);
$level = $used / $max;
if ($level < (3/4))
return false;
- logger("Maximum level (3/4) of connections reached: ".$used."/".$max);
+ logger("Maximum level (3/4) of system connections reached: ".$used."/".$max);
return true;
-
}
/**
*/
function poller_kill_stale_workers() {
$r = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'");
+
+ if (!dba::is_result($r)) {
+ // No processing here needed
+ return;
+ }
+
foreach($r AS $pid)
if (!posix_kill($pid["pid"], 0))
q("UPDATE `workerqueue` SET `executed` = '0000-00-00 00:00:00', `pid` = 0 WHERE `pid` = %d",