How to Adjust Kernel Tuning Parameters on a VPS? Print

  • 0

Kernel tuning parameters in Linux control how the operating system manages resources like memory, network, and CPU. Adjusting these parameters on a Virtual Private Server (VPS) can optimize performance for specific workloads, such as web servers, databases, or high-traffic applications. This guide provides practical steps to tune kernel parameters using sysctl on a Linux VPS (e.g., Ubuntu or CentOS), focusing on common use cases like improving network performance and memory management.

Why Adjust Kernel Tuning Parameters?

  • Optimize Performance: Enhance throughput for network-heavy applications.
  • Improve Stability: Prevent resource exhaustion under high load.
  • Tailor Resources: Match system behavior to specific workloads (e.g., web hosting, databases).
  • Increase Security: Mitigate risks like SYN flood attacks.

Prerequisites

  • Root Access: Full administrative access via SSH or console.
  • Linux OS: Ubuntu, CentOS, or another distribution with sysctl support.
  • Monitoring Tools: Install htop, iotop, or vmstat to monitor performance.
  • Backup: Save current kernel configurations before changes.

Steps to Adjust Kernel Tuning Parameters on a Linux VPS

This guide uses Ubuntu 20.04, with notes for CentOS where applicable, and assumes a VPS hosting a web server with moderate traffic.

Step 1: Access the VPS

  • Connect via SSH:
    ssh user@your-vps-ip
    
  • If SSH is unavailable, use the provider’s console. For example, VPS.DO’s SolusVM control panel offers VNC console access for direct management.

Step 2: Check Current Kernel Parameters

  • View current settings:
    sudo sysctl -a
    
  • Filter for specific parameters (e.g., network-related):
    sudo sysctl -a | grep net.ipv4
    

Step 3: Adjust Network Parameters

Optimize network performance for web servers or high-traffic applications.

  • Increase TCP buffer sizes for better throughput:
    sudo sysctl -w net.core.rmem_max=16777216
    sudo sysctl -w net.core.wmem_max=16777216
    sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
    sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
    
  • Enable TCP window scaling:
    sudo sysctl -w net.ipv4.tcp_window_scaling=1
    
  • Increase backlog for incoming connections:
    sudo sysctl -w net.core.somaxconn=65535
    
  • Protect against SYN flood attacks:
    sudo sysctl -w net.ipv4.tcp_syncookies=1
    

Step 4: Optimize Memory Management

Adjust memory parameters to improve caching and swapping behavior.

  • Increase file descriptor limit:
    sudo sysctl -w fs.file-max=2097152
    
  • Reduce swappiness to prioritize RAM over swap (e.g., for database servers):
    sudo sysctl -w vm.swappiness=10
    
  • Adjust dirty data writeback for better I/O performance:
    sudo sysctl -w vm.dirty_ratio=15
    sudo sysctl -w vm.dirty_background_ratio=5
    

Step 5: Make Changes Persistent

  • Edit /etc/sysctl.conf or a file in /etc/sysctl.d/:
    sudo nano /etc/sysctl.d/99-custom.conf
    
  • Add tuned parameters:
    net.core.rmem_max=16777216
    net.core.wmem_max=16777216
    net.ipv4.tcp_rmem=4096 87380 16777216
    net.ipv4.tcp_wmem=4096 65536 16777216
    net.ipv4.tcp_window_scaling=1
    net.core.somaxconn=65535
    net.ipv4.tcp_syncookies=1
    fs.file-max=2097152
    vm.swappiness=10
    vm.dirty_ratio=15
    vm.dirty_background_ratio=5
    
  • Apply changes:
    sudo sysctl -p /etc/sysctl.d/99-custom.conf
    

Step 6: Monitor and Test Performance

  • Monitor resource usage:
    htop  # CPU and memory
    iotop -o  # Disk I/O
    vmstat 1  # System performance
    
  • Test network performance:
    iperf3 -c <remote-server-ip>  # Requires iperf3 installed
    
  • Use VPS.DO’s SolusVM dashboard to track real-time CPU, RAM, and bandwidth usage, ensuring tuning aligns with available resources (e.g., 1–14 cores, 2–40 GB RAM).

Step 7: Verify and Fine-Tune

  • Check applied parameters:
    sudo sysctl -a | grep -E "net.core.rmem_max|vm.swappiness"
    
  • Stress test the system:
    stress --cpu 2 --io 2 --vm 1 --vm-bytes 512M
    
  • Monitor logs for errors:
    sudo tail -f /var/log/syslog  # Ubuntu
    sudo tail -f /var/log/messages  # CentOS
    
  • Adjust values incrementally if performance issues arise (e.g., reduce buffer sizes for low-memory VPS plans).

Troubleshooting

  • Performance Degradation: Revert changes and test one parameter at a time.
  • Syntax Errors: Verify /etc/sysctl.conf syntax and file permissions (chmod 644).
  • Out of Memory: Reduce buffer sizes or increase swap if memory is limited.
  • Provider Limits: Check for provider-imposed restrictions (e.g., CPU or network throttling) via logs or support.

Best Practices

  • Tune Conservatively: Start with small changes to avoid instability.
  • Match Workload: Adjust parameters based on specific needs (e.g., low swappiness for databases, high buffers for streaming).
  • Backup Configurations: Save /etc/sysctl.conf before changes:
    sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
    
  • Monitor Regularly: Use tools like htop or cron jobs to track performance.
  • Test Incrementally: Apply changes to a test VPS before production.

When to Seek Help

If tuning causes instability or errors, review logs (/var/log/syslog or /var/log/messages) and revert to backups. Contact your VPS provider with details. Providers like VPS.DO offer 24/7 ticket-based support for troubleshooting performance issues.

Adjusting kernel parameters optimizes your VPS for specific workloads, improving performance and stability while ensuring efficient resource use.


Was this answer helpful?

« Back