From e42939a2e30ff0de44ffd6dfd4bd0a6747a9bfd8 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 6 Jan 2021 23:04:25 +0000 Subject: [PATCH 1/4] Delete sleeping database processes --- static/defaults.config.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/static/defaults.config.php b/static/defaults.config.php index 2bc2bea5b1..893f77cbd5 100644 --- a/static/defaults.config.php +++ b/static/defaults.config.php @@ -194,6 +194,10 @@ return [ // If it is not running and hadn't been terminated normally, it will be started automatically. 'daemon_watchdog' => false, + // delete_sleeping_processes (Boolean) + // Periodically delete waiting database processes. + 'delete_sleeping_processes' => false, + // diaspora_test (Boolean) // For development only. Disables the message transfer. 'diaspora_test' => false, From ced417da6c2f3bcc37d747bbc5058d3e32767a67 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 6 Jan 2021 23:05:55 +0000 Subject: [PATCH 2/4] Added functionality to kill processes --- src/Worker/Cron.php | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 1901766d3a..1f1e916306 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -24,6 +24,7 @@ namespace Friendica\Worker; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Worker; +use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Tag; @@ -54,6 +55,10 @@ class Cron copy($basepath . '/.htaccess-dist', $basepath . '/.htaccess'); } + if (DI::config()->get('system', 'delete_sleeping_processes')) { + self::deleteSleepingProcesses(); + } + // Fork the cron jobs in separate parts to avoid problems when one of them is crashing Hook::fork(PRIORITY_MEDIUM, 'cron'); @@ -137,4 +142,26 @@ class Cron DI::config()->set('system', 'last_cron', time()); } + + /** + * Kill sleeping database processes + * + * @return void + */ + private static function deleteSleepingProcesses() + { + Logger::info('Looking for sleeping processes'); + + $processes = DBA::p("SHOW FULL PROCESSLIST"); + while ($process = DBA::fetch($processes)) { + // To-Do: Auf Datenbank abgrenzen + if (($process['Command'] != 'Sleep') || ($process['Time'] < 60) || ($process['db'] != DBA::databaseName())) { + continue; + } + + DBA::e("KILL ?", $process['Id']); + Logger::notice('Killed sleeping process', ['id' => $process['Id']]); + } + DBA::close($processes); + } } From d5280c3dc33a78aa39ca53c830121d936f8fbf75 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 6 Jan 2021 23:08:09 +0000 Subject: [PATCH 3/4] Removed to-do comment --- src/Worker/Cron.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 1f1e916306..7257101d90 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -154,7 +154,6 @@ class Cron $processes = DBA::p("SHOW FULL PROCESSLIST"); while ($process = DBA::fetch($processes)) { - // To-Do: Auf Datenbank abgrenzen if (($process['Command'] != 'Sleep') || ($process['Time'] < 60) || ($process['db'] != DBA::databaseName())) { continue; } From 0fd01015e136ca9bef98ecce480158400e81ffd7 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 6 Jan 2021 23:24:00 +0000 Subject: [PATCH 4/4] Increase wait time to 5 minutes --- src/Worker/Cron.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 7257101d90..acb5132afb 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -154,7 +154,7 @@ class Cron $processes = DBA::p("SHOW FULL PROCESSLIST"); while ($process = DBA::fetch($processes)) { - if (($process['Command'] != 'Sleep') || ($process['Time'] < 60) || ($process['db'] != DBA::databaseName())) { + if (($process['Command'] != 'Sleep') || ($process['Time'] < 300) || ($process['db'] != DBA::databaseName())) { continue; }