mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 09:13:19 -04:00
Merge pull request #57897 from nextcloud/backport/57590/stable33
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis (push) Waiting to run
Psalm static code analysis / static-code-analysis-security (push) Waiting to run
Psalm static code analysis / static-code-analysis-ocp (push) Waiting to run
Psalm static code analysis / static-code-analysis-ncu (push) Waiting to run
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (stable33, 8.4, stable33, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis (push) Waiting to run
Psalm static code analysis / static-code-analysis-security (push) Waiting to run
Psalm static code analysis / static-code-analysis-ocp (push) Waiting to run
Psalm static code analysis / static-code-analysis-ncu (push) Waiting to run
[stable33] fix: log memory usage for requests based on configured memory limit
This commit is contained in:
commit
98576c38fb
1 changed files with 38 additions and 8 deletions
46
lib/base.php
46
lib/base.php
|
|
@ -915,16 +915,46 @@ class OC {
|
|||
$eventLogger->end('request');
|
||||
});
|
||||
|
||||
register_shutdown_function(function () {
|
||||
register_shutdown_function(function () use ($config) {
|
||||
$memoryPeak = memory_get_peak_usage();
|
||||
$logLevel = match (true) {
|
||||
$memoryPeak > 500_000_000 => ILogger::FATAL,
|
||||
$memoryPeak > 400_000_000 => ILogger::ERROR,
|
||||
$memoryPeak > 300_000_000 => ILogger::WARN,
|
||||
default => null,
|
||||
};
|
||||
if ($logLevel !== null) {
|
||||
$debugModeEnabled = $config->getSystemValueBool('debug', false);
|
||||
$memoryLimit = null;
|
||||
|
||||
if (!$debugModeEnabled) {
|
||||
// Use the memory helper to get the real memory limit in bytes if debug mode is disabled
|
||||
try {
|
||||
$memoryInfo = new \OC\MemoryInfo();
|
||||
$memoryLimit = $memoryInfo->getMemoryLimit();
|
||||
} catch (Throwable $e) {
|
||||
// Ignore any errors and fall back to hardcoded thresholds
|
||||
}
|
||||
}
|
||||
|
||||
// Check if a memory limit is configured and can be retrieved and determine log level if debug mode is disabled
|
||||
if (!$debugModeEnabled && $memoryLimit !== null && $memoryLimit !== -1) {
|
||||
$logLevel = match (true) {
|
||||
$memoryPeak > $memoryLimit * 0.9 => ILogger::FATAL,
|
||||
$memoryPeak > $memoryLimit * 0.75 => ILogger::ERROR,
|
||||
$memoryPeak > $memoryLimit * 0.5 => ILogger::WARN,
|
||||
default => null,
|
||||
};
|
||||
|
||||
$memoryLimitIni = @ini_get('memory_limit');
|
||||
$message = 'Request used ' . Util::humanFileSize($memoryPeak) . ' of memory. Memory limit: ' . ($memoryLimitIni ?: 'unknown');
|
||||
} else {
|
||||
// Fall back to hardcoded thresholds if memory_limit cannot be determined or if debug mode is enabled
|
||||
$logLevel = match (true) {
|
||||
$memoryPeak > 500_000_000 => ILogger::FATAL,
|
||||
$memoryPeak > 400_000_000 => ILogger::ERROR,
|
||||
$memoryPeak > 300_000_000 => ILogger::WARN,
|
||||
default => null,
|
||||
};
|
||||
|
||||
$message = 'Request used more than 300 MB of RAM: ' . Util::humanFileSize($memoryPeak);
|
||||
}
|
||||
|
||||
// Log the message
|
||||
if ($logLevel !== null) {
|
||||
$logger = Server::get(LoggerInterface::class);
|
||||
$logger->log($logLevel, $message, ['app' => 'core']);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue