mirror of
https://github.com/friendica/friendica
synced 2025-04-26 01:10:15 +00:00
More cooldown calls for worker processes
This commit is contained in:
parent
3f3e1a2bf4
commit
0fa281247d
8 changed files with 58 additions and 19 deletions
|
@ -444,6 +444,47 @@ class Worker
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Slow the execution down if the system load is too high
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function coolDown()
|
||||
{
|
||||
$load_cooldown = DI::config()->get('system', 'worker_load_cooldown');
|
||||
$processes_cooldown = DI::config()->get('system', 'worker_processes_cooldown');
|
||||
|
||||
if (($load_cooldown == 0) && ($processes_cooldown == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$sleeping = false;
|
||||
|
||||
while ($load = System::getLoadAvg()) {
|
||||
if (($load_cooldown > 0) && ($load['average1'] > $load_cooldown)) {
|
||||
if (!$sleeping) {
|
||||
Logger::notice('Load induced pre execution cooldown.', ['max' => $load_cooldown, 'load' => $load, 'called-by' => System::callstack(1)]);
|
||||
$sleeping = true;
|
||||
}
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
if (($processes_cooldown > 0) && ($load['scheduled'] > $processes_cooldown)) {
|
||||
if (!$sleeping) {
|
||||
Logger::notice('Process induced pre execution cooldown.', ['max' => $processes_cooldown, 'load' => $load, 'called-by' => System::callstack(1)]);
|
||||
$sleeping = true;
|
||||
}
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ($sleeping) {
|
||||
Logger::notice('Cooldown ended.', ['max-load' => $load_cooldown, 'max-processes' => $processes_cooldown, 'load' => $load, 'called-by' => System::callstack(1)]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute a function from the queue
|
||||
*
|
||||
|
@ -460,26 +501,11 @@ class Worker
|
|||
|
||||
$cooldown = DI::config()->get('system', 'worker_cooldown', 0);
|
||||
if ($cooldown > 0) {
|
||||
Logger::debug('Pre execution cooldown.', ['cooldown' => $cooldown, 'id' => $queue['id'], 'priority' => $queue['priority'], 'command' => $queue['command']]);
|
||||
Logger::notice('Pre execution cooldown.', ['cooldown' => $cooldown, 'id' => $queue['id'], 'priority' => $queue['priority'], 'command' => $queue['command']]);
|
||||
sleep($cooldown);
|
||||
}
|
||||
|
||||
$load_cooldown = DI::config()->get('system', 'worker_load_cooldown');
|
||||
$processes_cooldown = DI::config()->get('system', 'worker_processes_cooldown');
|
||||
|
||||
while ((($load_cooldown > 0) || ($processes_cooldown > 0)) && ($load = System::getLoadAvg())) {
|
||||
if (($load_cooldown > 0) && ($load['average1'] > $load_cooldown)) {
|
||||
Logger::debug('Load induced pre execution cooldown.', ['max' => $load_cooldown, 'load' => $load, 'id' => $queue['id'], 'priority' => $queue['priority'], 'command' => $queue['command']]);
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
if (($processes_cooldown > 0) && ($load['scheduled'] > $processes_cooldown)) {
|
||||
Logger::debug('Process induced pre execution cooldown.', ['max' => $processes_cooldown, 'load' => $load, 'id' => $queue['id'], 'priority' => $queue['priority'], 'command' => $queue['command']]);
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
self::coolDown();
|
||||
|
||||
Logger::enableWorker($funcname);
|
||||
|
||||
|
@ -527,6 +553,8 @@ class Worker
|
|||
|
||||
Logger::info('Performance:', ['state' => self::$state, 'count' => $dbcount, 'stat' => $dbstat, 'write' => $dbwrite, 'lock' => $dblock, 'total' => $dbtotal, 'rest' => $rest, 'exec' => $exec]);
|
||||
|
||||
self::coolDown();
|
||||
|
||||
self::$up_start = microtime(true);
|
||||
self::$db_duration = 0;
|
||||
self::$db_duration_count = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue