From 19d8fa768a4f28d00da8954e03caf05f7ec9b73a Mon Sep 17 00:00:00 2001 From: Julius Knorr Date: Wed, 16 Oct 2024 18:12:05 +0200 Subject: [PATCH] perf: Log requests using high amount of memory as warning Signed-off-by: Julius Knorr --- lib/base.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/base.php b/lib/base.php index 25f978df836c3..5aa8f3c107d10 100644 --- a/lib/base.php +++ b/lib/base.php @@ -18,6 +18,7 @@ use OCP\Server; use OCP\Share; use OCP\User\Events\UserChangedEvent; +use OCP\Util; use Psr\Log\LoggerInterface; use Symfony\Component\Routing\Exception\MethodNotAllowedException; use function OCP\Log\logger; @@ -828,6 +829,21 @@ public static function init(): void { register_shutdown_function(function () use ($eventLogger) { $eventLogger->end('request'); }); + + register_shutdown_function(function () { + $memoryPeak = memory_get_peak_usage(); + $logLevel = match (true) { + $memoryPeak > 500_000_000 => \OCP\ILogger::FATAL, + $memoryPeak > 400_000_000 => \OCP\ILogger::ERROR, + $memoryPeak > 300_000_000 => \OCP\ILogger::WARN, + default => null, + }; + if ($logLevel !== null) { + $message = 'Request used more than 300 MB of RAM: ' . Util::humanFileSize($memoryPeak); + $logger = \OCP\Server::get(LoggerInterface::class); + $logger->log($logLevel, $message, ['app' => 'core']); + } + }); } /**