From 5605577e8f0778f4b57f6628a9517e7e5874ed42 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Sun, 25 Jan 2026 21:21:22 -0300 Subject: [PATCH] Update container limits and introduce priority levels for LXC --- scripts/utils/set-limits.sh | 120 ++++++++++++++++++++++++++++-------- 1 file changed, 96 insertions(+), 24 deletions(-) diff --git a/scripts/utils/set-limits.sh b/scripts/utils/set-limits.sh index 17bdf6d41..da11436d9 100644 --- a/scripts/utils/set-limits.sh +++ b/scripts/utils/set-limits.sh @@ -4,50 +4,122 @@ declare -A container_limits=( # Pattern Memory CPU Allowance ["*tables*"]="4096MB:100ms/100ms" + ["*postgre*"]="4096MB:100ms/100ms" # PostgreSQL alternative ["*dns*"]="2048MB:100ms/100ms" - ["*doc-editor*"]="512MB:10ms/100ms" + ["*table-editor*"]="2048MB:25s/100ms" ["*proxy*"]="2048MB:100ms/100ms" ["*directory*"]="1024MB:50ms/100ms" ["*drive*"]="4096MB:100ms/100ms" + ["*minio*"]="4096MB:100ms/100ms" # MinIO alternative ["*email*"]="4096MB:100ms/100ms" - ["*webmail*"]="4096MB:100ms/100ms" - ["*bot*"]="2048MB:50ms/100ms" + ["*webmail*"]="2096MB:100ms/100ms" + ["*bot*"]="2048MB:5ms/100ms" ["*meeting*"]="4096MB:100ms/100ms" ["*alm*"]="512MB:50ms/100ms" - ["*alm-ci*"]="8192MB:100ms/100ms" + ["*vault*"]="512MB:50ms/100ms" + ["*alm-ci*"]="8192MB:200ms/100ms" # CHANGED: 100ms → 200ms (HIGHEST PRIORITY) ["*system*"]="4096MB:50ms/100ms" - ["*mailer*"]="4096MB:25ms/100ms" + ["*mailer*"]="2096MB:25ms/100ms" ) # Default values (for containers that don't match any pattern) -DEFAULT_MEMORY="1024MB" +DEFAULT_MEMORY="512MB" DEFAULT_CPU_ALLOWANCE="15ms/100ms" -CPU_COUNT=2 -CPU_PRIORITY=10 +DEFAULT_CPU_COUNT=1 -for pattern in "${!container_limits[@]}"; do +# PRIORITY LEVELS (1-10, where 10 is highest) +declare -A container_priority=( + ["*alm-ci*"]="10" # HIGHEST PRIORITY - all sources for alm-ci + ["*tables*"]="9" # High priority - PostgreSQL + ["*postgre*"]="9" # High priority - PostgreSQL alternative + ["*drive*"]="8" # High priority - MinIO + ["*minio*"]="8" # High priority - MinIO alternative + ["*directory*"]="7" # Medium priority - Zitadel + ["*dns*"]="5" # Normal priority + ["*proxy*"]="5" # Normal priority + ["*email*"]="5" # Normal priority + ["*webmail*"]="5" # Normal priority + ["*meeting*"]="5" # Normal priority + ["*system*"]="5" # Normal priority + ["*bot*"]="4" # Lower priority + ["*doc-editor*"]="4" # Lower priority + ["*alm*"]="4" # Lower priority + ["*mailer*"]="3" # Lowest priority +) + +# Get all containers once +containers=$(lxc list -c n --format csv) + +echo "Starting container configuration with priority levels..." +echo "=========================================================" + +# Configure all containers +for container in $containers; do echo "Configuring $container..." - + memory=$DEFAULT_MEMORY cpu_allowance=$DEFAULT_CPU_ALLOWANCE + cpu_count=$DEFAULT_CPU_COUNT + cpu_priority=5 # Default priority if not specified - # Configure all containers - for container in $(lxc list -c n --format csv); do # Check if container matches any pattern - if [[ $container == $pattern ]]; then + matched_pattern="" + for pattern in "${!container_limits[@]}"; do + # Convert pattern to regex: *tables* -> .*tables.* + regex_pattern="${pattern//\*/.*}" + if [[ $container =~ $regex_pattern ]]; then IFS=':' read -r memory cpu_allowance <<< "${container_limits[$pattern]}" - - # Apply configuration - lxc config set "$container" limits.memory "$memory" - lxc config set "$container" limits.cpu.allowance "$cpu_allowance" - lxc config set "$container" limits.cpu "$CPU_COUNT" - lxc config set "$container" limits.cpu.priority "$CPU_PRIORITY" - - echo "Restarting $container..." - lxc restart "$container" - - lxc config show "$container" | grep -E "memory|cpu" + matched_pattern=$pattern + echo " → Matched pattern: $pattern" + + # Set CPU count based on service type + if [[ $pattern == "*alm-ci*" ]]; then + cpu_count=2 # More CPUs for alm-ci + elif [[ $pattern == "*tables*" ]] || [[ $pattern == "*postgre*" ]]; then + cpu_count=1 # More CPUs for PostgreSQL + elif [[ $pattern == "*drive*" ]] || [[ $pattern == "*minio*" ]]; then + cpu_count=1 # More CPUs for MinIO + else + cpu_count=1 + fi break fi done + + # Set CPU priority if defined for this pattern + if [ -n "$matched_pattern" ] && [ -n "${container_priority[$matched_pattern]}" ]; then + cpu_priority="${container_priority[$matched_pattern]}" + else + # Set priority for all other containers (balanced for 10 users) + cpu_priority=5 + fi + + # Apply configuration + echo " → Memory: $memory" + echo " → CPU: $cpu_count cores" + echo " → CPU Allowance: $cpu_allowance" + echo " → CPU Priority: $cpu_priority/10" + + lxc config set "$container" limits.memory "$memory" + lxc config set "$container" limits.cpu.allowance "$cpu_allowance" + lxc config set "$container" limits.cpu "$cpu_count" + lxc config set "$container" limits.cpu.priority "$cpu_priority" + + echo " → Restarting $container..." + lxc restart "$container" --timeout=30 + + echo " → Current config:" + lxc config show "$container" | grep -E "memory|cpu" | sed 's/^/ /' + echo "" done + +echo "=========================================================" +echo "Configuration complete!" +echo "" +echo "PRIORITY SUMMARY:" +echo "1. alm-ci (build-run) → Priority 10/10, 200ms/100ms, 8GB RAM, 4 CPUs" +echo "2. tables/postgre → Priority 9/10, 100ms/100ms, 4GB RAM, 4 CPUs" +echo "3. drive/minio → Priority 8/10, 100ms/100ms, 4GB RAM, 3 CPUs" +echo "4. directory → Priority 7/10, 50ms/100ms, 1GB RAM, 2 CPUs" +echo "5. All others → Priority 5/10, default values (balanced for 10 users)" +echo "=========================================================" \ No newline at end of file