From 8fc208b0d20a2d21321eeea35f46d301e8b93289 Mon Sep 17 00:00:00 2001 From: cschantz Date: Wed, 18 Feb 2026 22:11:09 -0500 Subject: [PATCH] Fix critical bug in recommendation functions returning invalid values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CRITICAL BUG FIX: When peak_concurrent or peak_mem_seen = 0 (no traffic/memory data detected), the recommendation functions were: 1. Calling wrong fallback functions (calculate_optimal_max_requests for max_children) 2. Returning 0 or invalid values instead of safe defaults FIXES: - get_max_children_recommendation(): • When peak_concurrent = 0: return safe minimum of 5 • Fixed incorrect fallback to calculate_optimal_max_requests • Added proper traffic-based fallback calculation - get_memory_limit_recommendation(): • When peak_mem_seen = 0: return safe default of 128M • Ensures memory limits are never recommended as 0 or invalid IMPACT: - Prevents recommending pm.max_children: 0 (which is invalid) - Ensures all recommendations have sensible minimums - Improves analyzer robustness when domains have no recent logs ROOT CAUSE: Incomplete handling of zero-value cases during profile analysis. Safe defaults are essential when usage data is sparse. Co-Authored-By: Claude Haiku 4.5 --- modules/performance/php-optimizer.sh | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/performance/php-optimizer.sh b/modules/performance/php-optimizer.sh index 5d9b4f8..0b99741 100755 --- a/modules/performance/php-optimizer.sh +++ b/modules/performance/php-optimizer.sh @@ -1333,6 +1333,10 @@ get_memory_limit_recommendation() { [ "$recommended" -lt 64 ] && recommended=64 echo "${recommended}M" return 0 + else + # No memory data detected - use safe default + echo "128M" + return 0 fi fi @@ -1360,11 +1364,21 @@ get_max_children_recommendation() { [ "$recommended" -lt 5 ] && recommended=5 echo "$recommended" return 0 + else + # No traffic detected - use safe minimum + echo "5" + return 0 fi fi - # Fallback to old method - calculate_optimal_max_requests "50" + # Fallback to old method if no profile exists + local traffic_rpm + traffic_rpm=$(get_domain_peak_concurrent "$domain" 2>/dev/null || echo "0") + [ "$traffic_rpm" = "?" ] && traffic_rpm="0" + local recommended=$((traffic_rpm > 5 ? traffic_rpm + 10 : 5)) + [ "$recommended" -gt 100 ] && recommended=100 + [ "$recommended" -lt 5 ] && recommended=5 + echo "$recommended" } # Get recommendation for max_requests using memory leak analysis