096a2d795f
ROOT CAUSE: The batch analyzer calls calculate_optimal_php_settings() which relies on calculate_max_children_memory_based(). When no active PHP-FPM processes exist (common in ondemand mode with sparse traffic), both functions returned 0. IMPACT: - Recommending pm.max_children: 0 (completely invalid, breaks PHP-FPM) - Causes silent failures in optimization reports - Especially problematic with ondemand PM mode + low traffic domains FIXES: 1. calculate_max_children_memory_based(): • When no processes detected: return 20 instead of 0 • When invalid parameters: return 20 instead of 0 2. calculate_optimal_php_settings(): • Added CRITICAL safety check: if final_max_children <= 0, use 20 • Ensures output is always safe regardless of calculation errors DEFAULTS: - Memory-based: 20 (safe minimum when no process data available) - Traffic-based: Uses actual peak concurrent if available - Safety guardrail: 20 minimum in all code paths This prevents invalid recommendations and ensures batch analyzer always provides sensible, actionable optimization guidance. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>