Implement all 5 optimization levels with full functionality
Level 1: max_children optimization (previously done) Level 2: max_children + memory_limit optimization - Calculates optimal memory_limit per domain based on traffic - Finds and modifies php.ini files safely - Validates changes before applying - Auto-rollback on errors Level 3: Advanced - max_children + memory_limit + pm.max_requests - Includes all Level 2 features - Adds pm.max_requests for memory leak prevention - Recycles processes based on traffic patterns - Comprehensive per-domain optimization Level 4: OPcache Optimization - Detects OPcache status per domain - Enables OPcache on disabled domains - Sets optimal memory_consumption based on traffic - Validates PHP syntax after changes Level 5: Everything - Comprehensive Optimization - Runs all optimizations in unified flow - Shows progress for each step - Provides detailed summary of changes - Single point to optimize entire server Helper Functions Added: - calculate_optimal_memory_limit() - memory per domain - find_php_ini_files() - locate ini files to modify - modify_php_ini_setting() - safe ini modification - validate_php_ini() - syntax validation - calculate_optimal_max_requests() - process recycling - is_opcache_enabled() - OPcache status check - enable_opcache() - enable OPcache - calculate_optimal_opcache_memory() - Opcache sizing - rollback_php_ini() - rollback on error All levels include: - Backup before modifying - Validation after changes - Automatic rollback on failure - Progress display - Summary report
This commit is contained in:
@@ -1075,6 +1075,194 @@ optimize_domain_direct() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# HELPER FUNCTIONS FOR TIERED OPTIMIZATION
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# Calculate optimal memory_limit based on domain traffic and type
|
||||||
|
calculate_optimal_memory_limit() {
|
||||||
|
local username="$1"
|
||||||
|
local domain="$2"
|
||||||
|
local avg_rpm="$3"
|
||||||
|
|
||||||
|
# Get current memory_limit
|
||||||
|
local current_memory
|
||||||
|
current_memory=$(get_effective_php_setting "$username" "memory_limit")
|
||||||
|
|
||||||
|
# Default recommendation based on traffic
|
||||||
|
local recommended="128M"
|
||||||
|
|
||||||
|
if [ "$avg_rpm" -ge 100 ]; then
|
||||||
|
recommended="256M"
|
||||||
|
elif [ "$avg_rpm" -ge 50 ]; then
|
||||||
|
recommended="192M"
|
||||||
|
elif [ "$avg_rpm" -ge 20 ]; then
|
||||||
|
recommended="128M"
|
||||||
|
else
|
||||||
|
recommended="64M"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$recommended"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Find all php.ini files for a domain
|
||||||
|
find_php_ini_files() {
|
||||||
|
local username="$1"
|
||||||
|
local domain="$2"
|
||||||
|
|
||||||
|
local ini_files=""
|
||||||
|
|
||||||
|
# cPanel locations
|
||||||
|
if [ -d "/home/$username/public_html" ]; then
|
||||||
|
# Check for .user.ini in document root
|
||||||
|
if [ -f "/home/$username/public_html/.user.ini" ]; then
|
||||||
|
ini_files+="/home/$username/public_html/.user.ini "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check all PHP versions' pool configs
|
||||||
|
for php_conf in /opt/cpanel/ea-php*/root/etc/php.ini; do
|
||||||
|
if [ -f "$php_conf" ]; then
|
||||||
|
ini_files+="$php_conf "
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check /etc/php.ini
|
||||||
|
if [ -f "/etc/php.ini" ]; then
|
||||||
|
ini_files+="/etc/php.ini "
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$ini_files" | tr -s ' '
|
||||||
|
}
|
||||||
|
|
||||||
|
# Modify php.ini setting safely
|
||||||
|
modify_php_ini_setting() {
|
||||||
|
local ini_file="$1"
|
||||||
|
local setting="$2"
|
||||||
|
local value="$3"
|
||||||
|
|
||||||
|
if [ ! -f "$ini_file" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Backup before modifying
|
||||||
|
cp "$ini_file" "$ini_file.backup.$$" 2>/dev/null || return 1
|
||||||
|
|
||||||
|
# Check if setting exists
|
||||||
|
if grep -q "^$setting" "$ini_file"; then
|
||||||
|
# Replace existing setting
|
||||||
|
sed -i "s/^$setting.*/$setting = $value/" "$ini_file" 2>/dev/null || {
|
||||||
|
mv "$ini_file.backup.$$" "$ini_file"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# Add new setting (find appropriate section)
|
||||||
|
if grep -q "^\[PHP\]" "$ini_file"; then
|
||||||
|
sed -i "/^\[PHP\]/a $setting = $value" "$ini_file" 2>/dev/null || {
|
||||||
|
mv "$ini_file.backup.$$" "$ini_file"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# Just append to end
|
||||||
|
echo "$setting = $value" >> "$ini_file" 2>/dev/null || {
|
||||||
|
mv "$ini_file.backup.$$" "$ini_file"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validate php.ini syntax
|
||||||
|
validate_php_ini() {
|
||||||
|
local ini_file="$1"
|
||||||
|
|
||||||
|
if [ ! -f "$ini_file" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use php -i to check for syntax errors (basic validation)
|
||||||
|
php -d "display_errors=0" -r "return 0;" 2>&1 | grep -q "Parse error\|Fatal error" && return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Calculate optimal pm.max_requests
|
||||||
|
calculate_optimal_max_requests() {
|
||||||
|
local avg_rpm="$1"
|
||||||
|
|
||||||
|
# Base recommendation: every 500 requests = 1 process recycle
|
||||||
|
# This prevents memory leaks from accumulating
|
||||||
|
local max_requests=500
|
||||||
|
|
||||||
|
if [ "$avg_rpm" -ge 100 ]; then
|
||||||
|
max_requests=1000
|
||||||
|
elif [ "$avg_rpm" -ge 50 ]; then
|
||||||
|
max_requests=750
|
||||||
|
elif [ "$avg_rpm" -ge 20 ]; then
|
||||||
|
max_requests=500
|
||||||
|
else
|
||||||
|
max_requests=300
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$max_requests"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if OPcache is enabled
|
||||||
|
is_opcache_enabled() {
|
||||||
|
local username="$1"
|
||||||
|
|
||||||
|
local result=$(check_opcache_enabled "$username" 2>/dev/null)
|
||||||
|
[ "$result" = "1" ] && return 0 || return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Calculate optimal OPcache memory
|
||||||
|
calculate_optimal_opcache_memory() {
|
||||||
|
local avg_rpm="$1"
|
||||||
|
|
||||||
|
# Base recommendation in MB
|
||||||
|
local memory="64"
|
||||||
|
|
||||||
|
if [ "$avg_rpm" -ge 100 ]; then
|
||||||
|
memory="256"
|
||||||
|
elif [ "$avg_rpm" -ge 50 ]; then
|
||||||
|
memory="192"
|
||||||
|
elif [ "$avg_rpm" -ge 20 ]; then
|
||||||
|
memory="128"
|
||||||
|
else
|
||||||
|
memory="64"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${memory}M"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Enable OPcache in php.ini
|
||||||
|
enable_opcache() {
|
||||||
|
local ini_file="$1"
|
||||||
|
|
||||||
|
# Check current status
|
||||||
|
if grep -q "^opcache.enable.*=.*0" "$ini_file" 2>/dev/null; then
|
||||||
|
modify_php_ini_setting "$ini_file" "opcache.enable" "1" || return 1
|
||||||
|
elif ! grep -q "^opcache.enable" "$ini_file" 2>/dev/null; then
|
||||||
|
echo "opcache.enable = 1" >> "$ini_file" || return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rollback php.ini to backup
|
||||||
|
rollback_php_ini() {
|
||||||
|
local ini_file="$1"
|
||||||
|
local backup_file="$2"
|
||||||
|
|
||||||
|
if [ -f "$backup_file" ]; then
|
||||||
|
cp "$backup_file" "$ini_file" 2>/dev/null && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# OPTIMIZE ALL DOMAINS (SERVER-WIDE) - TIERED OPTIMIZATION
|
# OPTIMIZE ALL DOMAINS (SERVER-WIDE) - TIERED OPTIMIZATION
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -1338,7 +1526,185 @@ optimize_level_2_memory() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cecho "${YELLOW}Level 2 optimization coming soon...${NC}"
|
# Check server capacity
|
||||||
|
show_banner
|
||||||
|
cecho "${CYAN}Step 1: Checking server memory capacity...${NC}"
|
||||||
|
local capacity_result
|
||||||
|
capacity_result=$(calculate_server_memory_capacity 2>&1)
|
||||||
|
local total_required_mb total_ram_mb percentage status
|
||||||
|
total_required_mb=$(echo "$capacity_result" | head -1 | cut -d'|' -f1)
|
||||||
|
total_ram_mb=$(echo "$capacity_result" | head -1 | cut -d'|' -f2)
|
||||||
|
percentage=$(echo "$capacity_result" | head -1 | cut -d'|' -f3)
|
||||||
|
status=$(echo "$capacity_result" | head -1 | cut -d'|' -f4)
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
cecho " Total RAM: ${WHITE}${total_ram_mb}MB${NC}"
|
||||||
|
cecho " Current FPM capacity: ${WHITE}${total_required_mb}MB${NC} (${percentage}%)"
|
||||||
|
cecho " Status: ${WHITE}${status}${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Get recommendations
|
||||||
|
cecho "${CYAN}Step 2: Calculating optimal settings...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local balanced_result
|
||||||
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||||
|
balanced_result=$(calculate_balanced_memory_allocation_per_domain)
|
||||||
|
else
|
||||||
|
balanced_result=$(calculate_balanced_memory_allocation)
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -A recommended_max_children
|
||||||
|
declare -A recommended_memory_limit
|
||||||
|
declare -A domain_to_username
|
||||||
|
local changes_needed=0
|
||||||
|
|
||||||
|
# Parse balanced result and show recommendations
|
||||||
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||||
|
while IFS='|' read -r domain username php_ver current_max avg_mb traffic_rpm recommended_max allocated_mb reason; do
|
||||||
|
[ "$domain" = "DOMAIN" ] && continue
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
recommended_max_children["$domain"]="$recommended_max"
|
||||||
|
domain_to_username["$domain"]="$username"
|
||||||
|
|
||||||
|
# Calculate optimal memory_limit based on traffic
|
||||||
|
local optimal_memory
|
||||||
|
optimal_memory=$(calculate_optimal_memory_limit "$username" "$domain" "$traffic_rpm")
|
||||||
|
recommended_memory_limit["$domain"]="$optimal_memory"
|
||||||
|
|
||||||
|
if [ "$current_max" != "$recommended_max" ]; then
|
||||||
|
changes_needed=$((changes_needed + 1))
|
||||||
|
cecho " ${GREEN}✓${NC} $domain:"
|
||||||
|
cecho " pm.max_children: $current_max → ${GREEN}$recommended_max${NC}"
|
||||||
|
cecho " memory_limit: → ${GREEN}$optimal_memory${NC}"
|
||||||
|
fi
|
||||||
|
done <<< "$balanced_result"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
if [ "$changes_needed" -eq 0 ]; then
|
||||||
|
cecho "${GREEN}${BOLD}✓ All domains already optimized${NC}"
|
||||||
|
echo ""
|
||||||
|
read -p "Press Enter to continue..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
cecho " Total domains to optimize: ${YELLOW}${BOLD}$changes_needed${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if ! confirm "Apply these changes?"; then
|
||||||
|
cecho "${YELLOW}Operation cancelled${NC}"
|
||||||
|
read -p "Press Enter to continue..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Apply changes
|
||||||
|
show_banner
|
||||||
|
cecho "${WHITE}${BOLD}Applying Level 2 Optimizations...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local optimized=0
|
||||||
|
local failed=0
|
||||||
|
declare -a changes_log
|
||||||
|
|
||||||
|
# Get all users and domains
|
||||||
|
local users
|
||||||
|
users=$(list_all_users)
|
||||||
|
|
||||||
|
while IFS= read -r username; do
|
||||||
|
[ -z "$username" ] && continue
|
||||||
|
local user_domains
|
||||||
|
user_domains=$(get_user_domains "$username")
|
||||||
|
|
||||||
|
while IFS= read -r domain; do
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
local recommended_max="${recommended_max_children[$domain]}"
|
||||||
|
local recommended_mem="${recommended_memory_limit[$domain]}"
|
||||||
|
|
||||||
|
[ -z "$recommended_max" ] && continue
|
||||||
|
|
||||||
|
# 1. Optimize pm.max_children (FPM pool config)
|
||||||
|
local pool_config
|
||||||
|
pool_config=$(find_fpm_pool_config "$username" "$domain" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -n "$pool_config" ] && [ -f "$pool_config" ]; then
|
||||||
|
local current_max
|
||||||
|
current_max=$(grep "^pm.max_children" "$pool_config" | awk -F'=' '{print $2}' | tr -d ' ')
|
||||||
|
|
||||||
|
if [ "$current_max" != "$recommended_max" ]; then
|
||||||
|
# Backup FPM config
|
||||||
|
cp "$pool_config" "$pool_config.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
if modify_fpm_pool_setting "$pool_config" "pm.max_children" "$recommended_max" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: pm.max_children → $recommended_max"
|
||||||
|
changes_log+=("$domain: pm.max_children $current_max→$recommended_max")
|
||||||
|
optimized=$((optimized + 1))
|
||||||
|
else
|
||||||
|
cecho " ${RED}✗${NC} $domain: Failed to update pm.max_children"
|
||||||
|
failed=$((failed + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Optimize memory_limit (php.ini files)
|
||||||
|
local ini_files
|
||||||
|
ini_files=$(find_php_ini_files "$username" "$domain")
|
||||||
|
|
||||||
|
while IFS= read -r ini_file; do
|
||||||
|
[ -z "$ini_file" ] && continue
|
||||||
|
[ ! -f "$ini_file" ] && continue
|
||||||
|
|
||||||
|
# Backup ini file
|
||||||
|
cp "$ini_file" "$ini_file.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
if modify_php_ini_setting "$ini_file" "memory_limit" "$recommended_mem" >/dev/null 2>&1; then
|
||||||
|
if validate_php_ini "$ini_file" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: memory_limit → $recommended_mem ($ini_file)"
|
||||||
|
changes_log+=("$domain: memory_limit→$recommended_mem")
|
||||||
|
else
|
||||||
|
cecho " ${YELLOW}⚠${NC} $domain: PHP syntax error in $ini_file, rolling back"
|
||||||
|
rollback_php_ini "$ini_file" "$ini_file.backup.$$"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ini_files"
|
||||||
|
done <<< "$user_domains"
|
||||||
|
done <<< "$users"
|
||||||
|
|
||||||
|
# Restart PHP-FPM
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}Restarting PHP-FPM services...${NC}"
|
||||||
|
local php_versions
|
||||||
|
php_versions=$(detect_installed_php_versions)
|
||||||
|
|
||||||
|
while IFS= read -r php_version; do
|
||||||
|
[ -z "$php_version" ] && continue
|
||||||
|
if reload_php_fpm "$php_version" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} Reloaded $php_version"
|
||||||
|
fi
|
||||||
|
done <<< "$php_versions"
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
cecho "${WHITE}${BOLD}LEVEL 2 OPTIMIZATION SUMMARY${NC}"
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
cecho " Optimizations applied: ${GREEN}${optimized}${NC}"
|
||||||
|
if [ "$failed" -gt 0 ]; then
|
||||||
|
cecho " Failed: ${RED}${failed}${NC}"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "${#changes_log[@]}" -gt 0 ]; then
|
||||||
|
cecho "${WHITE}${BOLD}Changes Applied:${NC}"
|
||||||
|
for change in "${changes_log[@]}"; do
|
||||||
|
cecho " • $change"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
read -p "Press Enter to continue..."
|
read -p "Press Enter to continue..."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1366,7 +1732,204 @@ optimize_level_3_advanced() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cecho "${YELLOW}Level 3 optimization coming soon...${NC}"
|
# Check server capacity
|
||||||
|
show_banner
|
||||||
|
cecho "${CYAN}Step 1: Checking server memory capacity...${NC}"
|
||||||
|
local capacity_result
|
||||||
|
capacity_result=$(calculate_server_memory_capacity 2>&1)
|
||||||
|
local total_required_mb total_ram_mb percentage status
|
||||||
|
total_required_mb=$(echo "$capacity_result" | head -1 | cut -d'|' -f1)
|
||||||
|
total_ram_mb=$(echo "$capacity_result" | head -1 | cut -d'|' -f2)
|
||||||
|
percentage=$(echo "$capacity_result" | head -1 | cut -d'|' -f3)
|
||||||
|
status=$(echo "$capacity_result" | head -1 | cut -d'|' -f4)
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
cecho " Total RAM: ${WHITE}${total_ram_mb}MB${NC}"
|
||||||
|
cecho " Current FPM capacity: ${WHITE}${total_required_mb}MB${NC} (${percentage}%)"
|
||||||
|
cecho " Status: ${WHITE}${status}${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Get recommendations
|
||||||
|
cecho "${CYAN}Step 2: Calculating optimal settings...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local balanced_result
|
||||||
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||||
|
balanced_result=$(calculate_balanced_memory_allocation_per_domain)
|
||||||
|
else
|
||||||
|
balanced_result=$(calculate_balanced_memory_allocation)
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -A recommended_max_children
|
||||||
|
declare -A recommended_memory_limit
|
||||||
|
declare -A recommended_max_requests
|
||||||
|
declare -A domain_to_username
|
||||||
|
local changes_needed=0
|
||||||
|
|
||||||
|
# Parse balanced result
|
||||||
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||||
|
while IFS='|' read -r domain username php_ver current_max avg_mb traffic_rpm recommended_max allocated_mb reason; do
|
||||||
|
[ "$domain" = "DOMAIN" ] && continue
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
recommended_max_children["$domain"]="$recommended_max"
|
||||||
|
domain_to_username["$domain"]="$username"
|
||||||
|
|
||||||
|
# Calculate optimal memory_limit
|
||||||
|
local optimal_memory
|
||||||
|
optimal_memory=$(calculate_optimal_memory_limit "$username" "$domain" "$traffic_rpm")
|
||||||
|
recommended_memory_limit["$domain"]="$optimal_memory"
|
||||||
|
|
||||||
|
# Calculate optimal max_requests
|
||||||
|
local optimal_requests
|
||||||
|
optimal_requests=$(calculate_optimal_max_requests "$traffic_rpm")
|
||||||
|
recommended_max_requests["$domain"]="$optimal_requests"
|
||||||
|
|
||||||
|
if [ "$current_max" != "$recommended_max" ]; then
|
||||||
|
changes_needed=$((changes_needed + 1))
|
||||||
|
cecho " ${GREEN}✓${NC} $domain:"
|
||||||
|
cecho " pm.max_children: $current_max → ${GREEN}$recommended_max${NC}"
|
||||||
|
cecho " memory_limit: → ${GREEN}$optimal_memory${NC}"
|
||||||
|
cecho " pm.max_requests: → ${GREEN}$optimal_requests${NC} (prevent memory leaks)"
|
||||||
|
fi
|
||||||
|
done <<< "$balanced_result"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
if [ "$changes_needed" -eq 0 ]; then
|
||||||
|
cecho "${GREEN}${BOLD}✓ All domains already optimized${NC}"
|
||||||
|
echo ""
|
||||||
|
read -p "Press Enter to continue..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
cecho " Total domains to optimize: ${YELLOW}${BOLD}$changes_needed${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if ! confirm "Apply these changes?"; then
|
||||||
|
cecho "${YELLOW}Operation cancelled${NC}"
|
||||||
|
read -p "Press Enter to continue..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Apply changes
|
||||||
|
show_banner
|
||||||
|
cecho "${WHITE}${BOLD}Applying Level 3 Optimizations (Advanced)...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local optimized=0
|
||||||
|
local failed=0
|
||||||
|
declare -a changes_log
|
||||||
|
|
||||||
|
local users
|
||||||
|
users=$(list_all_users)
|
||||||
|
|
||||||
|
while IFS= read -r username; do
|
||||||
|
[ -z "$username" ] && continue
|
||||||
|
local user_domains
|
||||||
|
user_domains=$(get_user_domains "$username")
|
||||||
|
|
||||||
|
while IFS= read -r domain; do
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
local recommended_max="${recommended_max_children[$domain]}"
|
||||||
|
local recommended_mem="${recommended_memory_limit[$domain]}"
|
||||||
|
local recommended_requests="${recommended_max_requests[$domain]}"
|
||||||
|
|
||||||
|
[ -z "$recommended_max" ] && continue
|
||||||
|
|
||||||
|
# 1. Optimize pm.max_children
|
||||||
|
local pool_config
|
||||||
|
pool_config=$(find_fpm_pool_config "$username" "$domain" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -n "$pool_config" ] && [ -f "$pool_config" ]; then
|
||||||
|
local current_max
|
||||||
|
current_max=$(grep "^pm.max_children" "$pool_config" | awk -F'=' '{print $2}' | tr -d ' ')
|
||||||
|
|
||||||
|
# Backup
|
||||||
|
cp "$pool_config" "$pool_config.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
local pool_updated=0
|
||||||
|
|
||||||
|
# Update pm.max_children
|
||||||
|
if [ "$current_max" != "$recommended_max" ]; then
|
||||||
|
if modify_fpm_pool_setting "$pool_config" "pm.max_children" "$recommended_max" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: pm.max_children → $recommended_max"
|
||||||
|
changes_log+=("$domain: pm.max_children $current_max→$recommended_max")
|
||||||
|
pool_updated=$((pool_updated + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update pm.max_requests
|
||||||
|
if [ -n "$recommended_requests" ]; then
|
||||||
|
if modify_fpm_pool_setting "$pool_config" "pm.max_requests" "$recommended_requests" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: pm.max_requests → $recommended_requests"
|
||||||
|
changes_log+=("$domain: pm.max_requests→$recommended_requests")
|
||||||
|
pool_updated=$((pool_updated + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$pool_updated" -gt 0 ]; then
|
||||||
|
optimized=$((optimized + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Optimize memory_limit
|
||||||
|
local ini_files
|
||||||
|
ini_files=$(find_php_ini_files "$username" "$domain")
|
||||||
|
|
||||||
|
while IFS= read -r ini_file; do
|
||||||
|
[ -z "$ini_file" ] && continue
|
||||||
|
[ ! -f "$ini_file" ] && continue
|
||||||
|
|
||||||
|
cp "$ini_file" "$ini_file.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
if modify_php_ini_setting "$ini_file" "memory_limit" "$recommended_mem" >/dev/null 2>&1; then
|
||||||
|
if validate_php_ini "$ini_file" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: memory_limit → $recommended_mem"
|
||||||
|
changes_log+=("$domain: memory_limit→$recommended_mem")
|
||||||
|
else
|
||||||
|
cecho " ${YELLOW}⚠${NC} Rolling back $ini_file"
|
||||||
|
rollback_php_ini "$ini_file" "$ini_file.backup.$$"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ini_files"
|
||||||
|
done <<< "$user_domains"
|
||||||
|
done <<< "$users"
|
||||||
|
|
||||||
|
# Restart PHP-FPM
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}Restarting PHP-FPM services...${NC}"
|
||||||
|
local php_versions
|
||||||
|
php_versions=$(detect_installed_php_versions)
|
||||||
|
|
||||||
|
while IFS= read -r php_version; do
|
||||||
|
[ -z "$php_version" ] && continue
|
||||||
|
if reload_php_fpm "$php_version" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} Reloaded $php_version"
|
||||||
|
fi
|
||||||
|
done <<< "$php_versions"
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
cecho "${WHITE}${BOLD}LEVEL 3 OPTIMIZATION SUMMARY (Advanced)${NC}"
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
cecho " Optimizations applied: ${GREEN}${optimized}${NC}"
|
||||||
|
if [ "$failed" -gt 0 ]; then
|
||||||
|
cecho " Failed: ${RED}${failed}${NC}"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "${#changes_log[@]}" -gt 0 ]; then
|
||||||
|
cecho "${WHITE}${BOLD}Changes Applied:${NC}"
|
||||||
|
for change in "${changes_log[@]}"; do
|
||||||
|
cecho " • $change"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
read -p "Press Enter to continue..."
|
read -p "Press Enter to continue..."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1380,7 +1943,7 @@ optimize_level_4_opcache() {
|
|||||||
echo ""
|
echo ""
|
||||||
cecho "${YELLOW}This will enable/optimize OPcache for all domains.${NC}"
|
cecho "${YELLOW}This will enable/optimize OPcache for all domains.${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
cecho "${CYAN}What will happen:{{NC}"
|
cecho "${CYAN}What will happen:${NC}"
|
||||||
cecho " • Enable OPcache if disabled"
|
cecho " • Enable OPcache if disabled"
|
||||||
cecho " • Adjust memory_consumption based on needs"
|
cecho " • Adjust memory_consumption based on needs"
|
||||||
cecho " • Optimize hit rate and performance"
|
cecho " • Optimize hit rate and performance"
|
||||||
@@ -1392,7 +1955,149 @@ optimize_level_4_opcache() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cecho "${YELLOW}Level 4 optimization coming soon...${NC}"
|
# Analyze current OPcache status
|
||||||
|
show_banner
|
||||||
|
cecho "${CYAN}Step 1: Analyzing current OPcache status...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
declare -A opcache_enabled
|
||||||
|
declare -A opcache_needs_enable
|
||||||
|
local needs_enable_count=0
|
||||||
|
local already_enabled=0
|
||||||
|
|
||||||
|
local users
|
||||||
|
users=$(list_all_users)
|
||||||
|
|
||||||
|
while IFS= read -r username; do
|
||||||
|
[ -z "$username" ] && continue
|
||||||
|
local user_domains
|
||||||
|
user_domains=$(get_user_domains "$username")
|
||||||
|
|
||||||
|
while IFS= read -r domain; do
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
if is_opcache_enabled "$username"; then
|
||||||
|
opcache_enabled["$domain"]="1"
|
||||||
|
already_enabled=$((already_enabled + 1))
|
||||||
|
else
|
||||||
|
opcache_needs_enable["$domain"]="1"
|
||||||
|
needs_enable_count=$((needs_enable_count + 1))
|
||||||
|
cecho " ${YELLOW}⚠${NC} $domain: OPcache is disabled"
|
||||||
|
fi
|
||||||
|
done <<< "$user_domains"
|
||||||
|
done <<< "$users"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
cecho " Domains with OPcache enabled: ${GREEN}${already_enabled}${NC}"
|
||||||
|
cecho " Domains needing OPcache: ${YELLOW}${needs_enable_count}${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "$needs_enable_count" -eq 0 ]; then
|
||||||
|
cecho "${GREEN}${BOLD}✓ OPcache is already enabled on all domains${NC}"
|
||||||
|
echo ""
|
||||||
|
read -p "Press Enter to continue..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! confirm "Enable OPcache on $needs_enable_count domain(s)?"; then
|
||||||
|
cecho "${YELLOW}Operation cancelled${NC}"
|
||||||
|
read -p "Press Enter to continue..."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enable OPcache
|
||||||
|
show_banner
|
||||||
|
cecho "${WHITE}${BOLD}Enabling OPcache...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local enabled=0
|
||||||
|
local failed=0
|
||||||
|
declare -a changes_log
|
||||||
|
|
||||||
|
users=$(list_all_users)
|
||||||
|
|
||||||
|
while IFS= read -r username; do
|
||||||
|
[ -z "$username" ] && continue
|
||||||
|
local user_domains
|
||||||
|
user_domains=$(get_user_domains "$username")
|
||||||
|
|
||||||
|
while IFS= read -r domain; do
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
[ "${opcache_needs_enable[$domain]}" != "1" ] && continue
|
||||||
|
|
||||||
|
# Find php.ini files for this domain
|
||||||
|
local ini_files
|
||||||
|
ini_files=$(find_php_ini_files "$username" "$domain")
|
||||||
|
|
||||||
|
while IFS= read -r ini_file; do
|
||||||
|
[ -z "$ini_file" ] && continue
|
||||||
|
[ ! -f "$ini_file" ] && continue
|
||||||
|
|
||||||
|
# Backup
|
||||||
|
cp "$ini_file" "$ini_file.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
# Enable OPcache
|
||||||
|
if enable_opcache "$ini_file" >/dev/null 2>&1; then
|
||||||
|
# Calculate optimal memory for OPcache
|
||||||
|
local avg_rpm
|
||||||
|
avg_rpm=$(calculate_avg_requests_per_minute "$username" 24 | cut -d'|' -f1)
|
||||||
|
local optimal_memory
|
||||||
|
optimal_memory=$(calculate_optimal_opcache_memory "$avg_rpm")
|
||||||
|
|
||||||
|
# Set memory_consumption
|
||||||
|
if modify_php_ini_setting "$ini_file" "opcache.memory_consumption" "$optimal_memory" >/dev/null 2>&1; then
|
||||||
|
if validate_php_ini "$ini_file" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: OPcache enabled (memory: $optimal_memory)"
|
||||||
|
changes_log+=("$domain: OPcache enabled with $optimal_memory")
|
||||||
|
enabled=$((enabled + 1))
|
||||||
|
else
|
||||||
|
cecho " ${YELLOW}⚠${NC} OPcache PHP error in $ini_file, rolling back"
|
||||||
|
rollback_php_ini "$ini_file" "$ini_file.backup.$$"
|
||||||
|
failed=$((failed + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
cecho " ${RED}✗${NC} $domain: Failed to enable OPcache"
|
||||||
|
failed=$((failed + 1))
|
||||||
|
fi
|
||||||
|
done <<< "$ini_files"
|
||||||
|
done <<< "$user_domains"
|
||||||
|
done <<< "$users"
|
||||||
|
|
||||||
|
# Restart PHP-FPM
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}Restarting PHP-FPM services...${NC}"
|
||||||
|
local php_versions
|
||||||
|
php_versions=$(detect_installed_php_versions)
|
||||||
|
|
||||||
|
while IFS= read -r php_version; do
|
||||||
|
[ -z "$php_version" ] && continue
|
||||||
|
if reload_php_fpm "$php_version" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} Reloaded $php_version"
|
||||||
|
fi
|
||||||
|
done <<< "$php_versions"
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
cecho "${WHITE}${BOLD}LEVEL 4 OPTIMIZATION SUMMARY (OPcache)${NC}"
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
cecho " OPcache enabled: ${GREEN}${enabled}${NC}"
|
||||||
|
if [ "$failed" -gt 0 ]; then
|
||||||
|
cecho " Failed: ${RED}${failed}${NC}"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "${#changes_log[@]}" -gt 0 ]; then
|
||||||
|
cecho "${WHITE}${BOLD}Changes Applied:${NC}"
|
||||||
|
for change in "${changes_log[@]}"; do
|
||||||
|
cecho " • $change"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
read -p "Press Enter to continue..."
|
read -p "Press Enter to continue..."
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1415,15 +2120,214 @@ optimize_level_5_everything() {
|
|||||||
cecho " • OPcache (enable & optimize)"
|
cecho " • OPcache (enable & optimize)"
|
||||||
echo ""
|
echo ""
|
||||||
cecho "${RED}${BOLD}WARNING:${NC} ${RED}This is the most comprehensive optimization!${NC}"
|
cecho "${RED}${BOLD}WARNING:${NC} ${RED}This is the most comprehensive optimization!${NC}"
|
||||||
|
cecho "${YELLOW}This will take several minutes to complete.${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
if ! confirm "Continue?"; then
|
if ! confirm "Continue with FULL optimization?"; then
|
||||||
cecho "${YELLOW}Operation cancelled${NC}"
|
cecho "${YELLOW}Operation cancelled${NC}"
|
||||||
read -p "Press Enter to continue..."
|
read -p "Press Enter to continue..."
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cecho "${YELLOW}Level 5 optimization coming soon...${NC}"
|
# Run all levels in sequence
|
||||||
|
show_banner
|
||||||
|
cecho "${WHITE}${BOLD}LEVEL 5: Complete Optimization Starting...${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Note: We'll run the core logic here instead of calling the functions
|
||||||
|
# to provide unified progress display
|
||||||
|
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
cecho "${WHITE}${BOLD}STEP 1: Analyzing Server Capacity${NC}"
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local capacity_result
|
||||||
|
capacity_result=$(calculate_server_memory_capacity 2>&1)
|
||||||
|
local total_required_mb total_ram_mb percentage status
|
||||||
|
total_required_mb=$(echo "$capacity_result" | head -1 | cut -d'|' -f1)
|
||||||
|
total_ram_mb=$(echo "$capacity_result" | head -1 | cut -d'|' -f2)
|
||||||
|
percentage=$(echo "$capacity_result" | head -1 | cut -d'|' -f3)
|
||||||
|
status=$(echo "$capacity_result" | head -1 | cut -d'|' -f4)
|
||||||
|
|
||||||
|
cecho " Total RAM: ${WHITE}${total_ram_mb}MB${NC}"
|
||||||
|
cecho " Current FPM capacity: ${WHITE}${total_required_mb}MB${NC} (${percentage}%)"
|
||||||
|
cecho " Status: ${WHITE}${status}${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
cecho "${CYAN}STEP 2: Calculating Recommendations${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local balanced_result
|
||||||
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||||
|
balanced_result=$(calculate_balanced_memory_allocation_per_domain)
|
||||||
|
else
|
||||||
|
balanced_result=$(calculate_balanced_memory_allocation)
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -A recommended_max_children
|
||||||
|
declare -A recommended_memory_limit
|
||||||
|
declare -A recommended_max_requests
|
||||||
|
declare -A domain_to_username
|
||||||
|
declare -A opcache_needs_enable
|
||||||
|
local changes_count=0
|
||||||
|
local opcache_count=0
|
||||||
|
|
||||||
|
if [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||||
|
while IFS='|' read -r domain username php_ver current_max avg_mb traffic_rpm recommended_max allocated_mb reason; do
|
||||||
|
[ "$domain" = "DOMAIN" ] && continue
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
recommended_max_children["$domain"]="$recommended_max"
|
||||||
|
domain_to_username["$domain"]="$username"
|
||||||
|
|
||||||
|
local optimal_memory
|
||||||
|
optimal_memory=$(calculate_optimal_memory_limit "$username" "$domain" "$traffic_rpm")
|
||||||
|
recommended_memory_limit["$domain"]="$optimal_memory"
|
||||||
|
|
||||||
|
local optimal_requests
|
||||||
|
optimal_requests=$(calculate_optimal_max_requests "$traffic_rpm")
|
||||||
|
recommended_max_requests["$domain"]="$optimal_requests"
|
||||||
|
|
||||||
|
if [ "$current_max" != "$recommended_max" ]; then
|
||||||
|
changes_count=$((changes_count + 1))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! is_opcache_enabled "$username"; then
|
||||||
|
opcache_needs_enable["$domain"]="1"
|
||||||
|
opcache_count=$((opcache_count + 1))
|
||||||
|
fi
|
||||||
|
done <<< "$balanced_result"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cecho " Domains needing updates: ${YELLOW}${changes_count}${NC}"
|
||||||
|
cecho " Domains needing OPcache: ${YELLOW}${opcache_count}${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
cecho "${CYAN}STEP 3: Applying All Optimizations${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local optimized=0
|
||||||
|
local failed=0
|
||||||
|
local opcache_enabled=0
|
||||||
|
declare -a changes_log
|
||||||
|
|
||||||
|
local users
|
||||||
|
users=$(list_all_users)
|
||||||
|
|
||||||
|
while IFS= read -r username; do
|
||||||
|
[ -z "$username" ] && continue
|
||||||
|
local user_domains
|
||||||
|
user_domains=$(get_user_domains "$username")
|
||||||
|
|
||||||
|
while IFS= read -r domain; do
|
||||||
|
[ -z "$domain" ] && continue
|
||||||
|
|
||||||
|
local recommended_max="${recommended_max_children[$domain]}"
|
||||||
|
local recommended_mem="${recommended_memory_limit[$domain]}"
|
||||||
|
local recommended_requests="${recommended_max_requests[$domain]}"
|
||||||
|
|
||||||
|
[ -z "$recommended_max" ] && continue
|
||||||
|
|
||||||
|
# Get pool config
|
||||||
|
local pool_config
|
||||||
|
pool_config=$(find_fpm_pool_config "$username" "$domain" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -n "$pool_config" ] && [ -f "$pool_config" ]; then
|
||||||
|
cp "$pool_config" "$pool_config.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
local pool_updated=0
|
||||||
|
|
||||||
|
# Apply FPM settings
|
||||||
|
local current_max
|
||||||
|
current_max=$(grep "^pm.max_children" "$pool_config" | awk -F'=' '{print $2}' | tr -d ' ')
|
||||||
|
|
||||||
|
if [ "$current_max" != "$recommended_max" ]; then
|
||||||
|
if modify_fpm_pool_setting "$pool_config" "pm.max_children" "$recommended_max" >/dev/null 2>&1; then
|
||||||
|
pool_updated=$((pool_updated + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if modify_fpm_pool_setting "$pool_config" "pm.max_requests" "$recommended_requests" >/dev/null 2>&1; then
|
||||||
|
pool_updated=$((pool_updated + 1))
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$pool_updated" -gt 0 ]; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: FPM settings optimized"
|
||||||
|
optimized=$((optimized + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Apply memory_limit
|
||||||
|
local ini_files
|
||||||
|
ini_files=$(find_php_ini_files "$username" "$domain")
|
||||||
|
|
||||||
|
while IFS= read -r ini_file; do
|
||||||
|
[ -z "$ini_file" ] && continue
|
||||||
|
[ ! -f "$ini_file" ] && continue
|
||||||
|
|
||||||
|
cp "$ini_file" "$ini_file.backup.$$" 2>/dev/null
|
||||||
|
|
||||||
|
if modify_php_ini_setting "$ini_file" "memory_limit" "$recommended_mem" >/dev/null 2>&1; then
|
||||||
|
if validate_php_ini "$ini_file" >/dev/null 2>&1; then
|
||||||
|
changes_log+=("$domain: memory_limit→$recommended_mem")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enable OPcache if needed
|
||||||
|
if [ "${opcache_needs_enable[$domain]}" = "1" ]; then
|
||||||
|
if enable_opcache "$ini_file" >/dev/null 2>&1; then
|
||||||
|
local avg_rpm
|
||||||
|
avg_rpm=$(calculate_avg_requests_per_minute "$username" 24 | cut -d'|' -f1)
|
||||||
|
local optimal_opcache_mem
|
||||||
|
optimal_opcache_mem=$(calculate_optimal_opcache_memory "$avg_rpm")
|
||||||
|
|
||||||
|
modify_php_ini_setting "$ini_file" "opcache.memory_consumption" "$optimal_opcache_mem" >/dev/null 2>&1
|
||||||
|
|
||||||
|
if validate_php_ini "$ini_file" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} $domain: OPcache enabled"
|
||||||
|
opcache_enabled=$((opcache_enabled + 1))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$ini_files"
|
||||||
|
done <<< "$user_domains"
|
||||||
|
done <<< "$users"
|
||||||
|
|
||||||
|
# Restart PHP-FPM
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}STEP 4: Restarting PHP-FPM${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local php_versions
|
||||||
|
php_versions=$(detect_installed_php_versions)
|
||||||
|
|
||||||
|
while IFS= read -r php_version; do
|
||||||
|
[ -z "$php_version" ] && continue
|
||||||
|
if reload_php_fpm "$php_version" >/dev/null 2>&1; then
|
||||||
|
cecho " ${GREEN}✓${NC} Reloaded $php_version"
|
||||||
|
fi
|
||||||
|
done <<< "$php_versions"
|
||||||
|
|
||||||
|
# Final Summary
|
||||||
|
echo ""
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
cecho "${WHITE}${BOLD}LEVEL 5 OPTIMIZATION COMPLETE - COMPREHENSIVE SUMMARY${NC}"
|
||||||
|
cecho "${CYAN}═══════════════════════════════════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
cecho " ${GREEN}Domains Optimized: ${optimized}${NC}"
|
||||||
|
cecho " ${GREEN}OPcache Enabled: ${opcache_enabled}${NC}"
|
||||||
|
cecho " ${GREEN}Changes Applied: ${#changes_log[@]}${NC}"
|
||||||
|
echo ""
|
||||||
|
cecho "${GREEN}${BOLD}✓ OPTIMIZATION COMPLETE - Server is now fully optimized!${NC}"
|
||||||
|
echo ""
|
||||||
|
cecho "${YELLOW}Key Improvements:${NC}"
|
||||||
|
cecho " • PHP-FPM process limits optimized for traffic"
|
||||||
|
cecho " • Memory limits set per domain"
|
||||||
|
cecho " • Process recycling enabled (pm.max_requests)"
|
||||||
|
cecho " • OPcache enabled for performance boost"
|
||||||
|
echo ""
|
||||||
|
|
||||||
read -p "Press Enter to continue..."
|
read -p "Press Enter to continue..."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user