Skip to main content
This guide covers performance optimization techniques for Pterodactyl Wings.

System Requirements

Minimum Requirements

  • CPU: 2+ cores recommended
  • RAM: 2GB minimum, 4GB+ recommended
  • Disk: SSD strongly recommended for /var/lib/pterodactyl
  • Network: 1Gbps for production environments
  • Docker: Version 20.10 or newer
For production environments hosting multiple servers:
  • CPU: 4+ cores with high single-thread performance
  • RAM: 8GB+ depending on server count
  • Disk: NVMe SSD with 500+ MB/s write speed
  • Network: 10Gbps for high-traffic environments

Configuration Optimization

Disk Check Interval

Wings calculates disk usage for each server periodically. This can cause high I/O on systems with many servers. Default setting:
Optimization:
  • Increase interval for servers with large file counts:
  • Disable completely (not recommended):
Setting disk_check_interval too low can cause massive I/O bottlenecks and high CPU usage. The default of 150 seconds is recommended for most installations.

Permission Checks on Boot

Wings can verify file permissions when starting servers, which may slow boot times on servers with many files. Default setting:
Optimization: Disable if you’re confident permissions are correct:
Disabling permission checks can speed up server boots but may cause permission issues if external processes modify files.

Server Bootstrap Concurrency

Wings uses a worker pool to bootstrap servers on startup with a limit of 4 concurrent servers (configured in cmd/root.go:196). This prevents resource exhaustion when Wings starts with many servers. The limit is currently hardcoded but prevents:
  • Memory exhaustion
  • Docker API overload
  • Network congestion
  • Slow boot times

Activity Send Settings

Activity logs are sent to the Panel in batches to reduce API calls. Default settings:
Optimization for high-traffic nodes:

Websocket Log Count

Controls how many log lines are sent when a user connects to the console. Default:
Optimization: Reduce for better initial connection speed:

Docker Configuration

Container PID Limit

Limits processes per container to prevent fork bombs. Default:
For servers needing more processes:

Tmpfs Size

Controls the size of /tmp mounted in containers. Uses host RAM. Default:
Optimization:
  • Reduce if host RAM is limited
  • Increase for servers needing larger temp storage
Tmpfs uses host system memory. Don’t allocate too much per server as it adds up quickly.

Memory Overhead

Wings applies a memory overhead multiplier to prevent OOM kills from JVM and similar software. Default behavior (when override: false):
  • < 2048 MB: 1.15x (15% overhead)
  • < 4096 MB: 1.10x (10% overhead)
  • ≥ 4096 MB: 1.05x (5% overhead)
Custom configuration:
See config/config_docker.go:154-185 for implementation details.

Network Configuration

Default network settings:
Optimization:
  1. Disable ICC if servers don’t need to communicate:
  2. Adjust MTU for your network:
  3. Use local DNS for faster resolution:

Docker Logging

Configure container log driver for better performance. Default:
Optimization:
  • Use local driver (faster than json-file)
  • Enable compression to save disk:
  • Reduce max-size for less disk usage:

Performant Docker Inspect

Wings can use an optimized Docker inspect method. Default:
Keep this enabled for better performance.

Storage Optimization

Backup Write Limits

Limit disk I/O during backups to prevent performance degradation. Default (unlimited):
Apply limits:

Backup Compression

Choose compression level based on your priorities. Options:
  • none - No compression (fastest, largest)
  • best_speed - gzip level 1 (default, balanced)
  • best_compression - gzip level 9 (slowest, smallest)
Default:
For faster backups:
For minimal disk usage:

Transfer Download Limits

Limit network I/O when downloading server transfers. Default:
Apply limits:

Docker Storage Driver

The storage driver significantly impacts performance. Check current driver:
Recommended drivers:
  1. overlay2 - Best for most use cases
  2. zfs - Good for datasets, snapshots
  3. btrfs - Good for advanced features
Avoid:
  • aufs - Deprecated, slow
  • devicemapper - Slow, avoid in production
Configure storage driver in /etc/docker/daemon.json:

Resource Monitoring

Built-in Stats Collection

Wings continuously monitors resource usage for running servers via Docker stats API (see environment/docker/stats.go:35-96). What’s monitored:
  • Memory usage (calculated to match Panel display)
  • CPU usage (absolute percentage)
  • Network I/O (RX/TX bytes)
  • Uptime (in milliseconds)
Stats update frequency: Real-time via Docker streaming API (updates every ~1 second)

Monitoring Resource Usage

Via Docker:
Via Wings API:
Via system tools:

Performance Bottlenecks

High CPU Usage

Common causes:
  1. Too many servers bootstrapping
    • Wings limits concurrent bootstrap to 4 servers
    • Wait for boot to complete
  2. Frequent disk checks
    • Increase disk_check_interval
    • Use faster storage (SSD/NVMe)
  3. Many servers with high process counts
    • Monitor with docker stats
    • Adjust container_pid_limit if needed
  4. Console spam (throttling)
    • Wings has built-in console throttling (2000 lines per 100ms by default)
    • Configure in config.yml:

High Memory Usage

Common causes:
  1. Many running servers
    • Each server container uses RAM
    • Monitor with docker stats
    • Ensure adequate overhead multipliers
  2. Memory leaks in game servers
    • Restart servers periodically
    • Adjust memory limits
  3. Large tmpfs allocations
    • Reduce tmpfs_size in config
  4. Backup/transfer operations
    • Apply write_limit to backups
    • Schedule during off-peak hours

High Disk I/O

Common causes:
  1. Frequent disk checks
    • Increase disk_check_interval to 300+
    • Use SSD storage
  2. Permission checks on boot
    • Set check_permissions_on_boot: false
  3. Backup operations
    • Apply write_limit
    • Use best_speed compression
    • Schedule during off-peak hours
  4. Slow storage driver
    • Use overlay2 instead of aufs/devicemapper
    • Enable SSD TRIM:
  5. Docker logs filling disk
    • Configure log rotation
    • Use local log driver
    • Reduce max-size
Monitor I/O:

High Network Usage

Common causes:
  1. Server transfers
    • Apply download_limit
    • Schedule during off-peak hours
  2. Many concurrent backups
    • Stagger backup schedules
    • Use local backup storage
  3. Panel API calls
    • Check remote_query.timeout setting
    • Ensure Panel is responsive
Monitor network:

Kernel Tuning

Network Performance

Increase network buffers:
Make permanent in /etc/sysctl.conf:

File Descriptor Limits

Increase for Docker:
Make permanent in /etc/security/limits.conf:

Docker Daemon Tuning

Edit /etc/docker/daemon.json:
Restart Docker:

Monitoring and Alerting

System Metrics

Monitor key metrics:
  • CPU usage per core
  • Memory usage and swap
  • Disk I/O and latency
  • Network throughput
  • Docker daemon health
  • Wings process health
Recommended tools:
  • Prometheus + Grafana - Comprehensive monitoring
  • Netdata - Real-time performance monitoring
  • cAdvisor - Container metrics
  • node_exporter - System metrics

Health Checks

Wings health endpoint:
Docker health:
Disk space alerts:

See Also