Skip to Content
QBCore docs โ€“ powered by Nextra 4
Performance๐Ÿ–ฅ๏ธ Server Optimization

๐Ÿ–ฅ๏ธ Server Optimization

Comprehensive guide to optimizing FiveM server configuration, operating system settings, and hardware utilization for maximum QBCore performance.

FiveM Server Configuration

Core Server Settings

Edit your server.cfg file with optimized settings:

# Server Information sv_hostname "Optimized QBCore Server" sv_maxclients 128 sv_endpointprivacy true # Performance Settings sv_enforceGameBuild 2944 # Latest stable build sv_scriptHookAllowed 0 # Disable for security/performance # Network Optimization netLibrary.multiplexDebug true net_maxPackets 1000 net_maxPacketSize 1300 net_threadsPerStream 8 # Resource Management ensure mapmanager ensure chat ensure spawnmanager ensure sessionmanager ensure basic-gamemode ensure hardcap ensure baseevents # QBCore Resources (load order matters) ensure qb-core ensure qb-multicharacter ensure qb-spawn # ... additional resources in dependency order # Performance Commands add_ace resource.console command.resmon allow add_ace resource.console command.status allow # Security Settings rcon_password "your_secure_password" sv_master1 "" # Disable server listing if needed

Advanced Server Configuration

# Memory Management set mysql_connection_string "server=localhost;database=qbcore;userid=username;password=password;charset=utf8mb4;SslMode=None;AllowUserVariables=True;DefaultCommandTimeout=300" # Debug Settings (disable in production) set sv_debugqueue false set sv_debugnative false # Logging Configuration set sv_logFile "server.log" set sv_logLevel "info" # OneSync Settings (for 64+ players) set onesync on set onesync_enableInfinity 1 set onesync_enableBeyond 1 set onesync_population 0 # Steam Web API (for Steam authentication) set steam_webApiKey "your_steam_api_key" # License Key (for server listing) sv_licenseKey "your_cfx_license_key"

Operating System Optimization

Linux Server Optimization

System Configuration

# /etc/sysctl.conf optimizations vm.swappiness=10 vm.dirty_ratio=15 vm.dirty_background_ratio=5 vm.overcommit_memory=1 net.core.rmem_max=134217728 net.core.wmem_max=134217728 net.ipv4.tcp_rmem=4096 87380 134217728 net.ipv4.tcp_wmem=4096 65536 134217728 net.ipv4.tcp_congestion_control=bbr net.core.netdev_max_backlog=5000 # Apply changes sudo sysctl -p

Process Limits

# /etc/security/limits.conf fivem soft nofile 65536 fivem hard nofile 65536 fivem soft nproc 32768 fivem hard nproc 32768 # For systemd services, create override sudo mkdir -p /etc/systemd/system/fivem.service.d sudo tee /etc/systemd/system/fivem.service.d/override.conf << EOF [Service] LimitNOFILE=65536 LimitNPROC=32768 EOF

CPU Governor

# Set CPU governor to performance sudo cpupower frequency-set -g performance # Or for balanced performance sudo cpupower frequency-set -g ondemand

Windows Server Optimization

Power Settings

# Set high performance power plan powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c # Disable power throttling powercfg /powerthrottling disable /path /processname FXServer.exe

Process Priority

# Set FiveM server to high priority wmic process where name="FXServer.exe" CALL setpriority "high priority" # Or use Task Manager to set priority permanently

Database Server Optimization

MySQL/MariaDB Configuration

# /etc/mysql/my.cnf or /etc/mysql/mariadb.conf.d/50-server.cnf [mysqld] # Basic Settings user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp # Performance Settings innodb_buffer_pool_size = 4G # 70-80% of available RAM innodb_log_file_size = 512M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT # Connection Settings max_connections = 500 max_connect_errors = 1000 connect_timeout = 10 wait_timeout = 28800 interactive_timeout = 28800 # Query Cache (disable for MySQL 5.7+) query_cache_type = 0 query_cache_size = 0 # Logging slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 log_queries_not_using_indexes = 1 # Character Set character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci [mysql] default-character-set = utf8mb4 [client] default-character-set = utf8mb4

Database Connection Optimization

-- oxmysql configuration in resource manifest dependency 'oxmysql' -- Connection settings set mysql_connection_string "server=localhost;port=3306;database=qbcore;userid=qbuser;password=secure_password;charset=utf8mb4;SslMode=None;AllowUserVariables=True;DefaultCommandTimeout=300;ConnectionTimeout=60;Pooling=true;MinimumPoolSize=5;MaximumPoolSize=100" -- Connection pooling settings set mysql_slow_query_warning 150 set mysql_debug false

Hardware Optimization

CPU Optimization

# Check CPU information lscpu cat /proc/cpuinfo # Monitor CPU usage htop vmstat 1 # Check for CPU throttling cat /proc/cpuinfo | grep MHz watch -n1 "cat /proc/cpuinfo | grep MHz"

Memory Optimization

# Check memory usage free -h cat /proc/meminfo # Monitor memory in real-time watch -n1 free -h # Check for memory leaks valgrind --tool=memcheck --leak-check=full ./FXServer +exec server.cfg

Storage Optimization

# Check disk I/O iostat -x 1 # Optimize SSD settings echo noop > /sys/block/sda/queue/scheduler # For SSDs echo deadline > /sys/block/sda/queue/scheduler # For HDDs # Check file system df -h lsblk

Process Management

Systemd Service Configuration

# /etc/systemd/system/fivem.service [Unit] Description=FiveM QBCore Server After=network.target mysql.service [Service] Type=simple User=fivem Group=fivem WorkingDirectory=/home/fivem/server ExecStart=/home/fivem/server/FXServer +exec server.cfg Restart=always RestartSec=5 LimitNOFILE=65536 LimitNPROC=32768 # Performance settings Nice=-10 IOSchedulingClass=1 IOSchedulingPriority=4 # Environment variables Environment=TERM=xterm [Install] WantedBy=multi-user.target

Process Monitoring

# Monitor FiveM process ps aux | grep FXServer top -p $(pgrep FXServer) # Monitor with detailed stats pidstat -p $(pgrep FXServer) 1 # Memory usage details pmap -d $(pgrep FXServer)

Network Optimization

Firewall Configuration

# UFW (Ubuntu Firewall) rules sudo ufw allow 30120/tcp # FiveM server port sudo ufw allow 30120/udp sudo ufw allow 22/tcp # SSH sudo ufw allow 3306/tcp # MySQL (if external access needed) # iptables rules for advanced configuration iptables -A INPUT -p tcp --dport 30120 -j ACCEPT iptables -A INPUT -p udp --dport 30120 -j ACCEPT

Network Interface Tuning

# Check network interfaces ip addr show ethtool eth0 # Optimize network buffers echo 'net.core.rmem_max = 134217728' >> /etc/sysctl.conf echo 'net.core.wmem_max = 134217728' >> /etc/sysctl.conf echo 'net.ipv4.tcp_rmem = 4096 87380 134217728' >> /etc/sysctl.conf echo 'net.ipv4.tcp_wmem = 4096 65536 134217728' >> /etc/sysctl.conf sudo sysctl -p

Performance Monitoring Scripts

Automated Performance Check

#!/bin/bash # performance-check.sh echo "=== FiveM Server Performance Check ===" echo "Date: $(date)" echo # CPU Usage echo "CPU Usage:" top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}' # Memory Usage echo "Memory Usage:" free -h | grep Mem | awk '{print $3 "/" $2 " (" $3/$2*100 "%)"}' # Disk Usage echo "Disk Usage:" df -h / | tail -1 | awk '{print $3 "/" $2 " (" $5 ")"}' # FiveM Process echo "FiveM Process:" ps aux | grep FXServer | grep -v grep | awk '{print "PID: " $2 ", CPU: " $3 "%, MEM: " $4 "%"}' # Network Connections echo "Network Connections:" netstat -an | grep :30120 | wc -l | awk '{print $1 " active connections"}' echo "=== End Performance Check ==="

Resource Usage Monitor

-- performance-monitor resource local performanceData = {} CreateThread(function() while true do Wait(60000) -- Check every minute local memUsage = collectgarbage("count") local timestamp = os.time() table.insert(performanceData, { timestamp = timestamp, memory = memUsage, players = #GetPlayers() }) -- Keep only last 24 hours of data if #performanceData > 1440 then table.remove(performanceData, 1) end -- Alert on high usage if memUsage > 102400 then -- 100MB print("^1[ALERT]^7 High memory usage: " .. math.floor(memUsage/1024) .. "MB") end end end) -- Export performance data RegisterNetEvent('performance:getData', function() local src = source TriggerClientEvent('performance:receiveData', src, performanceData) end)

Optimization Checklist

Daily Tasks

  • โœ… Check server logs for errors
  • โœ… Monitor resource usage
  • โœ… Verify database performance
  • โœ… Check player feedback

Weekly Tasks

  • โœ… Review performance metrics
  • โœ… Update system packages
  • โœ… Analyze slow query logs
  • โœ… Clean temporary files

Monthly Tasks

  • โœ… Full system performance audit
  • โœ… Database optimization
  • โœ… Security updates
  • โœ… Capacity planning review

Always test optimization changes in a development environment before applying to production servers.

Troubleshooting Common Issues

High CPU Usage

  1. Check for infinite loops in resources
  2. Monitor thread usage with resmon
  3. Review database query performance
  4. Check for resource conflicts

Memory Leaks

  1. Monitor memory usage over time
  2. Identify resources with growing memory usage
  3. Check for uncleaned objects and variables
  4. Review garbage collection patterns

Network Issues

  1. Monitor bandwidth usage
  2. Check for packet loss
  3. Verify firewall configuration
  4. Test connection stability

This server optimization guide provides the foundation for running high-performance QBCore servers. Regular monitoring and maintenance are essential for sustained optimal performance.

Last updated on