From b3c60f9c1e206c821e033eba0e224563770348ed Mon Sep 17 00:00:00 2001 From: cschantz Date: Tue, 17 Feb 2026 23:05:12 -0500 Subject: [PATCH] Implement PM mode optimization (STATIC/DYNAMIC/ONDEMAND) for Option 4 - Add apply_pm_mode selection logic - Display PM mode as separate option (option 2) in optimization menu - Apply pm, pm.min_spare_servers, and pm.max_spare_servers settings - Uses improved algorithm recommendations for DYNAMIC/ONDEMAND modes - Includes min_spare and max_spare configuration for non-STATIC modes - Now applies full set of recommendations from calculator, not just max_children Co-Authored-By: Claude Haiku 4.5 --- modules/performance/php-optimizer.sh | 42 +++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/modules/performance/php-optimizer.sh b/modules/performance/php-optimizer.sh index ad36feb..85016ab 100755 --- a/modules/performance/php-optimizer.sh +++ b/modules/performance/php-optimizer.sh @@ -535,7 +535,8 @@ optimize_domain() { echo "" cecho " ${GREEN}a${NC}) Apply all $opt_count recommendations" [ "${opt_available[max_children]}" = "true" ] && cecho " ${GREEN}1${NC}) Apply max_children optimization only" - [ "${opt_available[opcache]}" = "true" ] && cecho " ${GREEN}2${NC}) Apply OPcache optimization only" + [ "${opt_available[pm_mode]}" = "true" ] && cecho " ${GREEN}2${NC}) Apply PM mode optimization only" + [ "${opt_available[opcache]}" = "true" ] && cecho " ${GREEN}3${NC}) Apply OPcache optimization only" cecho " ${RED}n${NC}) Cancel - don't apply any changes" echo "" cecho "${CYAN}─────────────────────────────────────────────────────────────────────${NC}" @@ -544,9 +545,9 @@ optimize_domain() { while true; do read -p "Select option: " apply_choice - if ! [[ "$apply_choice" =~ ^[a1A2nN]$ ]]; then + if ! [[ "$apply_choice" =~ ^[a123nNA]$ ]]; then echo "" - cecho "${RED}Invalid selection. Please enter a, 1, 2, or n${NC}" + cecho "${RED}Invalid selection. Please enter a, 1, 2, 3, or n${NC}" echo "" continue fi @@ -555,6 +556,7 @@ optimize_domain() { # Determine which optimizations to apply local apply_max_children=false + local apply_pm_mode=false local apply_opcache=false # Convert to lowercase for consistent case matching @@ -563,12 +565,16 @@ optimize_domain() { case "$apply_choice" in a) apply_max_children=${opt_available[max_children]:-false} + apply_pm_mode=${opt_available[pm_mode]:-false} apply_opcache=${opt_available[opcache]:-false} ;; 1) apply_max_children=${opt_available[max_children]:-false} ;; 2) + apply_pm_mode=${opt_available[pm_mode]:-false} + ;; + 3) apply_opcache=${opt_available[opcache]:-false} ;; n) @@ -580,7 +586,7 @@ optimize_domain() { esac # Check if nothing was selected - if [ "$apply_max_children" = "false" ] && [ "$apply_opcache" = "false" ]; then + if [ "$apply_max_children" = "false" ] && [ "$apply_pm_mode" = "false" ] && [ "$apply_opcache" = "false" ]; then cecho "${YELLOW}No optimizations selected${NC}" echo "" read -p "Press Enter to continue..." @@ -624,6 +630,34 @@ optimize_domain() { fi fi + # Apply PM mode if selected (STATIC/DYNAMIC/ONDEMAND) + if [ "$apply_pm_mode" = "true" ]; then + if [ -n "$pool_config" ] && [ -f "$pool_config" ]; then + if [ -n "$improved_pm_mode" ]; then + # Apply pm mode + if modify_fpm_pool_setting "$pool_config" "pm" "$improved_pm_mode" >/dev/null 2>&1; then + cecho " ${GREEN}✓${NC} Set pm = $improved_pm_mode" + + # For DYNAMIC and ONDEMAND modes, also set min/max spare servers + if [[ "$improved_pm_mode" == "dynamic" ]] || [[ "$improved_pm_mode" == "ondemand" ]]; then + if modify_fpm_pool_setting "$pool_config" "pm.min_spare_servers" "$improved_min_spare" >/dev/null 2>&1; then + cecho " ${GREEN}✓${NC} Set pm.min_spare_servers = $improved_min_spare" + fi + + if modify_fpm_pool_setting "$pool_config" "pm.max_spare_servers" "$improved_max_spare" >/dev/null 2>&1; then + cecho " ${GREEN}✓${NC} Set pm.max_spare_servers = $improved_max_spare" + fi + fi + + changes_made=$((changes_made + 1)) + else + cecho " ${RED}✗${NC} Failed to set pm mode" + changes_failed=$((changes_failed + 1)) + fi + fi + fi + fi + # Apply OPcache if selected if [ "$apply_opcache" = "true" ]; then # Note: OPcache settings are in php.ini, not FPM pool config