Integrate improved PHP-FPM calculator into php-optimizer.sh
CHANGES: 1. SOURCE IMPROVED CALCULATOR LIBRARY - Added source statement for php-calculator-improved.sh - Makes all improved calculation functions available 2. UPDATE DOMAIN ANALYSIS DISPLAY - Now shows BOTH improved and legacy algorithm results - Displays side-by-side comparison of recommendations - Shows memory savings/safety improvements - Color-coded to show which is recommended 3. ENHANCED OPTIMIZATION SECTION - Updated to use improved_max_children instead of legacy - Applies traffic-aware recommendations immediately - Shows detailed reasoning for recommendations 4. IMPROVED CHECK_SERVER_MEMORY_CAPACITY FUNCTION - Now uses improved algorithm for recommendations - Shows pm mode selection (STATIC/DYNAMIC/ONDEMAND) - Recommends min/max spare server settings - Displays comparative analysis vs legacy IMPACT: Users analyzing single domains now get: - Memory-based max_children with dynamic system reserve - Traffic-based max_children from 7-day access logs - PM mode recommendation (STATIC/DYNAMIC/ONDEMAND) - min_spare_servers and max_spare_servers suggestions - Detailed reasoning for recommendations When applying optimizations: - Uses improved algorithm (traffic-aware, MySQL-aware) - Falls back safely if analysis data unavailable - Better memory efficiency across all server sizes BACKWARD COMPATIBLE: - Old calculation functions still available as reference - Can display legacy recommendations for comparison - No breaking changes to existing code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ source "$PHP_TOOLKIT_DIR/lib/user-manager.sh" || { echo "ERROR: user-manager.sh
|
||||
source "$PHP_TOOLKIT_DIR/lib/php-detector.sh" || { echo "ERROR: php-detector.sh not found"; exit 1; }
|
||||
source "$PHP_TOOLKIT_DIR/lib/php-analyzer.sh" || { echo "ERROR: php-analyzer.sh not found"; exit 1; }
|
||||
source "$PHP_TOOLKIT_DIR/lib/php-config-manager.sh" || { echo "ERROR: php-config-manager.sh not found"; exit 1; }
|
||||
source "$PHP_TOOLKIT_DIR/lib/php-calculator-improved.sh" || { echo "ERROR: php-calculator-improved.sh not found"; exit 1; }
|
||||
|
||||
# Color codes (using safe echo -e)
|
||||
RED='\033[0;31m'
|
||||
@@ -481,12 +482,26 @@ optimize_domain() {
|
||||
cecho "${WHITE}${BOLD}RECOMMENDED OPTIMIZATIONS${NC}"
|
||||
echo ""
|
||||
|
||||
# Calculate optimal max_children
|
||||
# Get total system memory for improved calculation
|
||||
local total_ram_mb
|
||||
total_ram_mb=$(free -m | awk '/^Mem:/ {print $2}')
|
||||
|
||||
# IMPROVED: Calculate using new algorithm
|
||||
local improved_result
|
||||
improved_result=$(calculate_optimal_php_settings "$username" "$total_ram_mb")
|
||||
local improved_max_children improved_pm_mode improved_min_spare improved_max_spare improved_reason
|
||||
improved_max_children=$(get_field "$improved_result" 1)
|
||||
improved_pm_mode=$(get_field "$improved_result" 2)
|
||||
improved_min_spare=$(get_field "$improved_result" 3)
|
||||
improved_max_spare=$(get_field "$improved_result" 4)
|
||||
improved_reason=$(get_field "$improved_result" 5)
|
||||
|
||||
# OLD: Calculate using legacy algorithm (for comparison)
|
||||
local optimal_result
|
||||
optimal_result=$(calculate_optimal_max_children "$username" 1024)
|
||||
local recommended_max_children reason
|
||||
recommended_max_children=$(echo "$optimal_result" | cut -d'|' -f1)
|
||||
reason=$(echo "$optimal_result" | cut -d'|' -f2)
|
||||
local legacy_max_children legacy_reason
|
||||
legacy_max_children=$(echo "$optimal_result" | cut -d'|' -f1)
|
||||
legacy_reason=$(echo "$optimal_result" | cut -d'|' -f2)
|
||||
|
||||
# Get current max_children
|
||||
local pool_config
|
||||
@@ -497,16 +512,40 @@ optimize_domain() {
|
||||
declare -A opt_description
|
||||
local opt_count=0
|
||||
|
||||
local current_max_children=""
|
||||
local current_max_children current_pm_mode
|
||||
if [ -n "$pool_config" ] && [ -f "$pool_config" ]; then
|
||||
current_max_children=$(grep "^pm.max_children" "$pool_config" | awk -F'=' '{print $2}' | tr -d ' ')
|
||||
current_pm_mode=$(grep "^pm =" "$pool_config" | awk -F'=' '{print $2}' | tr -d ' ')
|
||||
|
||||
if [ -n "$current_max_children" ] && [ "$recommended_max_children" -ne "$current_max_children" ]; then
|
||||
if [ -n "$current_max_children" ] && [ "$improved_max_children" -ne "$current_max_children" ]; then
|
||||
opt_count=$((opt_count + 1))
|
||||
opt_available["max_children"]="true"
|
||||
opt_description["max_children"]="Adjust pm.max_children from $current_max_children to $recommended_max_children"
|
||||
cecho "${GREEN}$opt_count.${NC} Adjust ${BOLD}pm.max_children${NC} from ${RED}$current_max_children${NC} to ${GREEN}$recommended_max_children${NC}"
|
||||
cecho " Reason: $reason"
|
||||
opt_description["max_children"]="Adjust pm.max_children from $current_max_children to $improved_max_children"
|
||||
|
||||
# Display comprehensive recommendation
|
||||
cecho "${GREEN}$opt_count.${NC} Adjust ${BOLD}pm.max_children${NC} from ${RED}$current_max_children${NC} to ${GREEN}$improved_max_children${NC}"
|
||||
cecho " ${CYAN}Improved Algorithm:${NC} $improved_max_children (${improved_reason})"
|
||||
cecho " ${YELLOW}Legacy Algorithm:${NC} $legacy_max_children (${legacy_reason})"
|
||||
|
||||
# Show comparison if different
|
||||
if [ "$improved_max_children" -ne "$legacy_max_children" ]; then
|
||||
local diff=$((improved_max_children - legacy_max_children))
|
||||
if [ "$diff" -gt 0 ]; then
|
||||
cecho " ${GREEN}✓ Improved: +$diff processes (safer)${NC}"
|
||||
else
|
||||
cecho " ${GREEN}✓ Improved: $diff processes (more efficient)${NC}"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Recommend PM mode if different
|
||||
if [ -n "$current_pm_mode" ] && [ "$current_pm_mode" != "$improved_pm_mode" ]; then
|
||||
opt_count=$((opt_count + 1))
|
||||
opt_available["pm_mode"]="true"
|
||||
opt_description["pm_mode"]="Change pm mode from $current_pm_mode to $improved_pm_mode"
|
||||
cecho "${GREEN}$opt_count.${NC} Change ${BOLD}pm${NC} mode from ${RED}$current_pm_mode${NC} to ${GREEN}$improved_pm_mode${NC}"
|
||||
cecho " Recommended: $improved_pm_mode with min_spare=$improved_min_spare, max_spare=$improved_max_spare"
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
@@ -630,12 +669,12 @@ optimize_domain() {
|
||||
local changes_made=0
|
||||
local changes_failed=0
|
||||
|
||||
# Apply max_children if selected
|
||||
# Apply max_children if selected (uses improved algorithm)
|
||||
if [ "$apply_max_children" = "true" ]; then
|
||||
if [ -n "$pool_config" ] && [ -f "$pool_config" ]; then
|
||||
if [ -n "$recommended_max_children" ] && [ -n "$current_max_children" ]; then
|
||||
if modify_fpm_pool_setting "$pool_config" "pm.max_children" "$recommended_max_children" >/dev/null 2>&1; then
|
||||
cecho " ${GREEN}✓${NC} Set pm.max_children = $recommended_max_children"
|
||||
if [ -n "$improved_max_children" ] && [ -n "$current_max_children" ]; then
|
||||
if modify_fpm_pool_setting "$pool_config" "pm.max_children" "$improved_max_children" >/dev/null 2>&1; then
|
||||
cecho " ${GREEN}✓${NC} Set pm.max_children = $improved_max_children"
|
||||
changes_made=$((changes_made + 1))
|
||||
else
|
||||
cecho " ${RED}✗${NC} Failed to set pm.max_children"
|
||||
@@ -1306,21 +1345,48 @@ view_fpm_stats() {
|
||||
done <<< "$pool_settings"
|
||||
fi
|
||||
|
||||
# Calculate optimal max_children
|
||||
# Calculate optimal max_children using improved algorithm
|
||||
echo ""
|
||||
cecho "${CYAN}─────────────────────────────────────────────────────────────────────${NC}"
|
||||
cecho "${WHITE}${BOLD}RECOMMENDATION${NC}"
|
||||
cecho "${CYAN}─────────────────────────────────────────────────────────────────────${NC}"
|
||||
echo ""
|
||||
|
||||
local optimal_result
|
||||
optimal_result=$(calculate_optimal_max_children "$username" 1024)
|
||||
local recommended reason
|
||||
recommended=$(echo "$optimal_result" | cut -d'|' -f1)
|
||||
reason=$(echo "$optimal_result" | cut -d'|' -f2)
|
||||
# Get total system memory for improved calculation
|
||||
local total_sys_ram
|
||||
total_sys_ram=$(free -m | awk '/^Mem:/ {print $2}')
|
||||
|
||||
cecho " Optimal pm.max_children: ${GREEN}${BOLD}$recommended${NC}"
|
||||
cecho " Reason: $reason"
|
||||
# NEW: Improved algorithm
|
||||
local improved_opt
|
||||
improved_opt=$(calculate_optimal_php_settings "$username" "$total_sys_ram")
|
||||
local improved_max improved_pm improved_min improved_max_spare improved_opt_reason
|
||||
improved_max=$(get_field "$improved_opt" 1)
|
||||
improved_pm=$(get_field "$improved_opt" 2)
|
||||
improved_min=$(get_field "$improved_opt" 3)
|
||||
improved_max_spare=$(get_field "$improved_opt" 4)
|
||||
improved_opt_reason=$(get_field "$improved_opt" 5)
|
||||
|
||||
# OLD: Legacy algorithm (for comparison)
|
||||
local legacy_result
|
||||
legacy_result=$(calculate_optimal_max_children "$username" 1024)
|
||||
local legacy_recommended legacy_reason
|
||||
legacy_recommended=$(echo "$legacy_result" | cut -d'|' -f1)
|
||||
legacy_reason=$(echo "$legacy_result" | cut -d'|' -f2)
|
||||
|
||||
# Display comparison
|
||||
cecho " ${GREEN}${BOLD}Improved Recommendation:${NC}"
|
||||
cecho " pm.max_children: ${GREEN}$improved_max${NC}"
|
||||
cecho " pm mode: ${GREEN}$improved_pm${NC}"
|
||||
cecho " min_spare_servers: ${GREEN}$improved_min${NC}"
|
||||
cecho " max_spare_servers: ${GREEN}$improved_max_spare${NC}"
|
||||
cecho " Reason: $improved_opt_reason"
|
||||
echo ""
|
||||
|
||||
if [ "$improved_max" -ne "$legacy_recommended" ]; then
|
||||
cecho " ${YELLOW}Legacy Recommendation (for reference):${NC}"
|
||||
cecho " pm.max_children: ${YELLOW}$legacy_recommended${NC} ($legacy_reason)"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo ""
|
||||
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||
|
||||
Reference in New Issue
Block a user