Files
EZ-Homelab/wiki/Resource-Limits-Template.md
kelinfoxy ef55974b50 Wiki major update
updated with recent documentation
2026-01-21 19:18:39 -05:00

6.8 KiB

AI-Homelab Resource Limits Template

Modern deploy.resources configuration for Docker Compose

Based on researched typical usage patterns for homelab services

These are conservative defaults - monitor and adjust as needed

===========================================

SERVICE TYPE TEMPLATES

===========================================

LIGHTWEIGHT SERVICES (Reverse proxy, auth, DNS, monitoring)

lightweight_service: deploy: resources: limits: cpus: '0.25' # 25% of 1 CPU core memory: 128M # 128MB RAM pids: 256 # Max processes reservations: cpus: '0.10' # Reserve 10% of 1 CPU memory: 64M # Reserve 64MB RAM

STANDARD WEB SERVICES (Dashboards, simple web apps)

web_service: deploy: resources: limits: cpus: '0.50' # 50% of 1 CPU core memory: 256M # 256MB RAM pids: 512 # Max processes reservations: cpus: '0.25' # Reserve 25% of 1 CPU memory: 128M # Reserve 128MB RAM

DATABASE SERVICES (PostgreSQL, MariaDB, Redis)

database_service: deploy: resources: limits: cpus: '1.0' # 1 CPU core memory: 1G # 1GB RAM (for caching) pids: 1024 # Max processes reservations: cpus: '0.50' # Reserve 0.5 CPU memory: 512M # Reserve 512MB RAM

MEDIA SERVERS (Jellyfin, Plex - without GPU)

media_server: deploy: resources: limits: cpus: '2.0' # 2 CPU cores (for transcoding) memory: 2G # 2GB RAM pids: 2048 # Max processes reservations: cpus: '1.0' # Reserve 1 CPU memory: 1G # Reserve 1GB RAM

DOWNLOADERS (qBittorrent, Transmission)

downloader_service: deploy: resources: limits: cpus: '1.0' # 1 CPU core memory: 512M # 512MB RAM pids: 1024 # Max processes reservations: cpus: '0.50' # Reserve 0.5 CPU memory: 256M # Reserve 256MB RAM

HEAVY APPLICATIONS (Nextcloud, Gitea with users)

heavy_app: deploy: resources: limits: cpus: '1.5' # 1.5 CPU cores memory: 1G # 1GB RAM pids: 2048 # Max processes reservations: cpus: '0.75' # Reserve 0.75 CPU memory: 512M # Reserve 512MB RAM

MONITORING STACK (Prometheus, Grafana, Loki)

monitoring_service: deploy: resources: limits: cpus: '0.75' # 0.75 CPU cores memory: 512M # 512MB RAM pids: 1024 # Max processes reservations: cpus: '0.25' # Reserve 0.25 CPU memory: 256M # Reserve 256MB RAM

===========================================

SPECIFIC SERVICE RECOMMENDATIONS

===========================================

Core Infrastructure Stack

traefik: # Reverse proxy - handles SSL/TLS/crypto template: lightweight_service notes: "CPU intensive for SSL handshakes, low memory usage"

authelia: # Authentication service template: lightweight_service notes: "Very low resource usage, mostly memory for sessions"

duckdns: # DNS updater template: lightweight_service notes: "Minimal resources, mostly network I/O"

Infrastructure Stack

pihole: # DNS ad blocker template: lightweight_service notes: "Memory intensive for blocklists, low CPU"

dockge: # Docker management UI template: web_service notes: "Light web interface, occasional CPU spikes"

glances: # System monitoring template: web_service notes: "Low resource monitoring tool"

Dashboard Stack

homepage: # Status dashboard template: web_service notes: "Static content, very light"

homarr: # Dashboard with widgets template: web_service notes: "JavaScript heavy but still light"

Media Stack

jellyfin: # Media server template: media_server notes: "CPU intensive for transcoding, high memory for caching"

calibre_web: # Ebook manager template: web_service notes: "Light web app with database"

VPN Stack

qbittorrent: # Torrent client template: downloader_service notes: "Network I/O heavy, moderate CPU for hashing"

Home Assistant Stack

home_assistant: # Smart home hub template: heavy_app notes: "Python app with many integrations, moderate resources"

esphome: # IoT firmware template: web_service notes: "Web interface for device management"

nodered: # Automation workflows template: web_service notes: "Node.js app, moderate memory usage"

Productivity Stack

nextcloud: # File sync/sharing template: heavy_app notes: "PHP app with database, resource intensive with users"

gitea: # Git server template: web_service notes: "Go app, lightweight but scales with repos"

Monitoring Stack

prometheus: # Metrics collection template: monitoring_service notes: "Time-series database, memory intensive for retention"

grafana: # Metrics visualization template: web_service notes: "Web dashboard, moderate resources"

loki: # Log aggregation template: monitoring_service notes: "Log storage, memory for indexing"

uptime_kuma: # Uptime monitoring template: web_service notes: "Monitoring checks, light resource usage"

Development Stack

code_server: # VS Code in browser template: heavy_app notes: "Full IDE, resource intensive for large projects"

Utility Stack

Most utilities are lightweight web services

speedtest_tracker: template: web_service notes: "Speed test monitoring, occasional CPU usage"

===========================================

RESOURCE MONITORING COMMANDS

===========================================

Monitor current usage

docker stats

Monitor specific service

docker stats service_name

Check container resource usage over time

docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"

Check system resources

docker system df

View running processes in container

docker exec service_name ps aux

Memory usage details

docker exec service_name cat /proc/meminfo | head -10

===========================================

ADJUSTMENT GUIDELINES

===========================================

If container is killed by OOM:

1. Increase memory limit by 50-100%

2. Check for memory leaks in application

3. Consider adding swap space to host

If container is slow/unresponsive:

1. Increase CPU limits

2. Check for CPU bottlenecks

3. Monitor disk I/O if database-related

General rule of thumb:

- Start with conservative limits

- Monitor actual usage with 'docker stats'

- Adjust based on real-world usage patterns

- Leave 20-30% headroom for spikes

/home/kelin/AI-Homelab/docs/resource-limits-template.md