From 335e20ad38d12137ede323b03c7c9444c90392b9 Mon Sep 17 00:00:00 2001 From: Josh Richards Date: Tue, 16 Jul 2024 19:33:43 -0400 Subject: [PATCH 1/2] feat: PHP-FPM setup check / max_children check Signed-off-by: Josh Richards --- .../composer/composer/autoload_classmap.php | 1 + .../composer/composer/autoload_static.php | 1 + apps/settings/lib/AppInfo/Application.php | 2 + apps/settings/lib/SetupChecks/PhpSAPI.php | 42 +++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 apps/settings/lib/SetupChecks/PhpSAPI.php diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php index 488aaee264d..8f1aaefad0f 100644 --- a/apps/settings/composer/composer/autoload_classmap.php +++ b/apps/settings/composer/composer/autoload_classmap.php @@ -115,6 +115,7 @@ return array( 'OCA\\Settings\\SetupChecks\\PhpOpcacheSetup' => $baseDir . '/../lib/SetupChecks/PhpOpcacheSetup.php', 'OCA\\Settings\\SetupChecks\\PhpOutdated' => $baseDir . '/../lib/SetupChecks/PhpOutdated.php', 'OCA\\Settings\\SetupChecks\\PhpOutputBuffering' => $baseDir . '/../lib/SetupChecks/PhpOutputBuffering.php', + 'OCA\\Settings\\SetupChecks\\PhpSAPI' => $baseDir . '/../lib/SetupChecks/PhpSAPI.php', 'OCA\\Settings\\SetupChecks\\PushService' => $baseDir . '/../lib/SetupChecks/PushService.php', 'OCA\\Settings\\SetupChecks\\RandomnessSecure' => $baseDir . '/../lib/SetupChecks/RandomnessSecure.php', 'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => $baseDir . '/../lib/SetupChecks/ReadOnlyConfig.php', diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index ac2e4645239..a55c09d8c1a 100644 --- a/apps/settings/composer/composer/autoload_static.php +++ b/apps/settings/composer/composer/autoload_static.php @@ -130,6 +130,7 @@ class ComposerStaticInitSettings 'OCA\\Settings\\SetupChecks\\PhpOpcacheSetup' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOpcacheSetup.php', 'OCA\\Settings\\SetupChecks\\PhpOutdated' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOutdated.php', 'OCA\\Settings\\SetupChecks\\PhpOutputBuffering' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpOutputBuffering.php', + 'OCA\\Settings\\SetupChecks\\PhpSAPI' => __DIR__ . '/..' . '/../lib/SetupChecks/PhpSAPI.php', 'OCA\\Settings\\SetupChecks\\PushService' => __DIR__ . '/..' . '/../lib/SetupChecks/PushService.php', 'OCA\\Settings\\SetupChecks\\RandomnessSecure' => __DIR__ . '/..' . '/../lib/SetupChecks/RandomnessSecure.php', 'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => __DIR__ . '/..' . '/../lib/SetupChecks/ReadOnlyConfig.php', diff --git a/apps/settings/lib/AppInfo/Application.php b/apps/settings/lib/AppInfo/Application.php index f62555f0cdb..28bff28c9d0 100644 --- a/apps/settings/lib/AppInfo/Application.php +++ b/apps/settings/lib/AppInfo/Application.php @@ -58,6 +58,7 @@ use OCA\Settings\SetupChecks\PhpModules; use OCA\Settings\SetupChecks\PhpOpcacheSetup; use OCA\Settings\SetupChecks\PhpOutdated; use OCA\Settings\SetupChecks\PhpOutputBuffering; +use OCA\Settings\SetupChecks\PhpSAPI; use OCA\Settings\SetupChecks\PushService; use OCA\Settings\SetupChecks\RandomnessSecure; use OCA\Settings\SetupChecks\ReadOnlyConfig; @@ -190,6 +191,7 @@ class Application extends App implements IBootstrap { $context->registerSetupCheck(PhpOpcacheSetup::class); $context->registerSetupCheck(PhpOutdated::class); $context->registerSetupCheck(PhpOutputBuffering::class); + $context->registerSetupCheck(PhpSAPI::class); $context->registerSetupCheck(RandomnessSecure::class); $context->registerSetupCheck(ReadOnlyConfig::class); $context->registerSetupCheck(SecurityHeaders::class); diff --git a/apps/settings/lib/SetupChecks/PhpSAPI.php b/apps/settings/lib/SetupChecks/PhpSAPI.php new file mode 100644 index 00000000000..060c04e4222 --- /dev/null +++ b/apps/settings/lib/SetupChecks/PhpSAPI.php @@ -0,0 +1,42 @@ +l10n->t('PHP SAPI'); + } + + public function getCategory(): string { + return 'php'; + } + + public function run(): SetupResult { + $sapi_type = php_sapi_name(); + + if ($sapi_type === 'fpm-fcgi') { + $sapi_max_children_reached = fpm_get_status()['max-children-reached']; // since last restart + if ($sapi_max_children_reached === 1) { + $sapi_max_children_reached_actual = fpm_get_status()['max-active-processes']; + return SetupResult::error($this->l10n->t('Your PHP-FPM pool reached it\'s maximum number of allowed processes (' . $sapi_max_children_reached_actual . ') at least once since your last restart. You may want to increase your pm.max_children value in your PHP-FPM pool configuration to avoid problems such as Gateway Timeouts, client connection errors, and slow performance.'), $this->urlGenerator->linkToDocs('admin-php-fpm')); + } + return SetupResult::success(); + } +} From a6626d6718409abb2086977d2cec79e7359524af Mon Sep 17 00:00:00 2001 From: Josh Richards Date: Tue, 16 Jul 2024 19:47:05 -0400 Subject: [PATCH 2/2] fix: typo Signed-off-by: Josh Richards --- apps/settings/lib/SetupChecks/PhpSAPI.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/settings/lib/SetupChecks/PhpSAPI.php b/apps/settings/lib/SetupChecks/PhpSAPI.php index 060c04e4222..59dfaa44253 100644 --- a/apps/settings/lib/SetupChecks/PhpSAPI.php +++ b/apps/settings/lib/SetupChecks/PhpSAPI.php @@ -36,7 +36,9 @@ class PhpSAPI implements ISetupCheck { if ($sapi_max_children_reached === 1) { $sapi_max_children_reached_actual = fpm_get_status()['max-active-processes']; return SetupResult::error($this->l10n->t('Your PHP-FPM pool reached it\'s maximum number of allowed processes (' . $sapi_max_children_reached_actual . ') at least once since your last restart. You may want to increase your pm.max_children value in your PHP-FPM pool configuration to avoid problems such as Gateway Timeouts, client connection errors, and slow performance.'), $this->urlGenerator->linkToDocs('admin-php-fpm')); + } } + return SetupResult::success(); } }