]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat(cron): Warn on excessive memory consumption in background jobs
authorJoas Schilling <coding@schilljs.com>
Wed, 20 Dec 2023 09:58:08 +0000 (10:58 +0100)
committerJoas Schilling <coding@schilljs.com>
Wed, 20 Dec 2023 09:58:08 +0000 (10:58 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
cron.php

index 7d661621ed090f203ae0ea20f16f57c73c21d626..41c5157befa9d2ca02bfc34451b5e9a2c6f71ef4 100644 (file)
--- a/cron.php
+++ b/cron.php
@@ -149,8 +149,22 @@ try {
                        }
 
                        $logger->debug('CLI cron call has selected job with ID ' . strval($job->getId()), ['app' => 'cron']);
+
+                       $memoryBefore = memory_get_usage();
+                       $memoryPeakBefore = memory_get_peak_usage();
+
                        $job->execute($jobList, $logger);
 
+                       $memoryAfter = memory_get_usage();
+                       $memoryPeakAfter = memory_get_peak_usage();
+
+                       if ($memoryAfter - $memoryBefore > 10_000_000) {
+                               $logger->warning('Used memory grew by more than 10 MB when executing job ' . get_class($job) . ' : ' . \OCP\Util::humanFileSize($memoryAfter). ' (before: ' . \OCP\Util::humanFileSize($memoryBefore) . ')', ['app' => 'cron']);
+                       }
+                       if ($memoryPeakAfter > 300_000_000) {
+                               $logger->warning('Cron job used more than 300 MB of ram after executing job ' . get_class($job) . ': ' . \OCP\Util::humanFileSize($memoryPeakAfter) . ' (before: ' . \OCP\Util::humanFileSize($memoryPeakBefore) . ')', ['app' => 'cron']);
+                       }
+
                        // clean up after unclean jobs
                        \OC_Util::tearDownFS();
                        $tempManager->clean();