+ } else
+ logger("Function ".$funcname." does not exist");
+
+ // Quit the poller once every hour
+ if (time() > ($starttime + 3600))
+ return;
+ }
+
+}
+
+function poller_too_much_workers($stage) {
+
+ $queues = get_config("system", "worker_queues");
+
+ if ($queues == 0)
+ $queues = 4;
+
+ $active = poller_active_workers();
+
+ // Decrease the number of workers at higher load
+ $load = current_load();
+ if($load) {
+ $maxsysload = intval(get_config('system','maxloadavg'));
+ if($maxsysload < 1)
+ $maxsysload = 50;
+
+ $maxworkers = $queues;
+
+ // Some magical mathemathics to reduce the workers
+ $exponent = 3;
+ $slope = $maxworkers / pow($maxsysload, $exponent);
+ $queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent));
+
+ logger("Current load stage ".$stage.": ".$load." - maximum: ".$maxsysload." - current queues: ".$active." - maximum: ".$queues, LOGGER_DEBUG);
+