服务器游戏服务器优化:游戏服务器性能优化
不少新手运维搭建好游戏服务器后,发现玩家一多就卡顿、掉线,或是响应很慢。
这通常不是硬件不够,而是系统参数和服务端配置没针对游戏场景做调优。
下面按照零基础也能照着做的顺序,从准备到验证一步步讲清楚。
第一步:检查硬件与系统基准
优化之前先确认当前环境。
需要一台Linux服务器(推荐CentOS 7/8或Ubuntu 20.04+),已安装好游戏服务端。
登录服务器后,先查看核心信息:
# 查看CPU、内存、磁盘
lscpu | grep "Model name"
free -h
df -h
# 查看网卡队列长度
echo "当前网卡队列长度:"
/sbin/ethtool -g eth0 | grep "Pre-set"
如果网卡最大队列只有256或更低,游戏高并发时容易丢包。
建议至少设置到4096。
第二步:操作系统内核与网络参数调整
游戏服务端对网络延迟和文件句柄很敏感。
直接修改 /etc/sysctl.conf 追加以下参数(以root执行):
# 最大文件句柄数
fs.file-max = 1000000
# TCP快速回收与复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 新版内核已废弃,设为0
# 网络接收/发送缓冲区默认和最大值
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
# 最大积压连接数
net.core.somaxconn = 8192
保存后执行 sysctl -p 生效。
同时调整用户进程限制:在 /etc/security/limits.conf 末尾添加:
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 65535
* hard nproc 65535
重启游戏服务或重新登录后生效。
如果使用宝塔面板,可在“面板设置→系统工具→系统参数”中直接修改网络参数,无需手写命令。
第三步:游戏服务端与数据库配置调优
不同游戏的配置项差别很大,但有几个通用点:
- 线程数:不要超过CPU物理核心数的2倍(例如4核8线程,设6~8)。
- 最大连接数:根据内存估算,每连接约占用2~4MB,留出余量。
- 数据库如果使用MySQL,建议调整
/etc/my.cnf:
[mysqld]
max_connections = 500
innodb_buffer_pool_size = 1G # 总内存的50%~70%
innodb_log_file_size = 256M
query_cache_type = 0 # 游戏频写多,关闭查询缓存
重启MySQL(systemctl restart mysqld)。
宝塔用户可以在“数据库→管理→性能调整”中直接拖动滑块,更直观。
第四步:日常监控与高频问题排查
调优后持续观察72小时。推荐在宝塔面板开启“网络流量”“CPU使用率”“内存占用”三个图表,如果发现某个指标持续满载,再针对性调整。
常见高频问题:
- 玩家连接时断时续:检查
net.ipv4.tcp_fin_timeout是否小于30秒,建议设为15~20。 - 文件句柄不足:使用
lsof | wc -l查看当前句柄数,若接近fs.file-max,需调高。 - 数据库too many connections:临时
set global max_connections = 1000;后马上优化连接池。
第五步:验证效果与最终建议
用 stress 工具模拟高并发,或用真实玩家测试。
执行 top -bn1 | grep "Cpu(s)" 观察CPU等待(wa)和空闲率。
如果wa低于5%、空闲率保持20%以上,且玩家反馈卡顿明显减少,说明优化生效。
如果你正在处理游戏服务器性能优化,建议先按本文步骤完整执行,再根据自己的环境和游戏类型微调。
遇到异常时优先回看避坑和高频问题部分。