服务器磁盘写满导致游戏停机,处理核心是紧急清理配合长期监控预警,而行业共识认为提前规划容量比任何事后补救都更有效,这也是游戏服务器磁盘空间不足怎么办的终极答案。
服务器磁盘写满怎么处理?紧急恢复三步走
第一步:立即切断写入并定位根因
当磁盘使用率上升到100%,游戏进程通常会因无法写入日志或数据库而崩溃,此时不要盲目重启,否则写入激增可能让情况更糟。
- 停止写入服务:优先停掉游戏主进程、日志采集服务、数据库,如果无法正常停止,用
kill -STOP冻结进程,避免新数据写入。 - 快速定位大文件:使用
df -h确认磁盘分区,再执行du -sh / | sort -rh | head -10逐层排查,犯懒可以直接用ncdu交互式分析,省去逐层查找的麻烦。 - 常见元凶列表:
- 游戏日志文件(如
/var/log/game-server/.log) - 数据库二进制日志(binlog)
- 玩家上传的临时文件(截图、录像)
- 过期备份和旧的安装包
- 游戏日志文件(如
第二步:清理空间要快准狠
清理时避开还在使用的文件,否则可能造成数据丢失或服务异常。
- 日志轮转:如果日志文件正被进程占用,用
truncate -s 0 /path/to/log清空文件内容,而不是rm删除,这样进程句柄依然有效,空间立即释放。 - 删除过期备份:
find /backup -mtime +30 -delete,保留最近30天的备份。 - 临时文件:检查
/tmp、/var/tmp,以及游戏目录下的temp、cache文件夹。 - 数据库binlog:登录MySQL执行
PURGE BINARY LOGS BEFORE CURRENT_DATE - INTERVAL 7 DAY;
,只保留最近7天。
- 紧急扩容:如果清理后依然紧巴巴,直接挂载一块新磁盘,修改游戏日志路径或数据库数据目录到新盘,这是最快恢复服务的方式,多数云厂商支持在线挂载数据盘,费用按量计费,相比停机损失可忽略不计。
第三步:恢复服务并验证
清理完毕或扩容后,先手动启动数据库,确认连接正常,再启动游戏进程,观察日志写入是否正常,用df -h检查使用率是否降到安全线以下,比如低于70%,最后通知测试团队做一次登录和核心玩法验证,确保数据完整。
游戏服务器磁盘空间不足怎么办?日常预防方案
日志管理自动化
日志是磁盘空间的第一大消耗者,手工清理永远跟不上写入速度。
- 配置logrotate:在
/etc/logrotate.d/下创建游戏日志规则,/var/log/game/.log { daily rotate 7 compress delaycompress missingok notifempty copytruncate }copytruncate参数可以不中断服务,直接截断日志。 - 业务日志分级:区分debug、info、error日志,线上只保留info和error,debug日志直接丢弃或写入独立缓存盘。
- 数据库日志:开启binlog的自动清理,设置
expire_logs_days = 15。
监控告警不能只靠人工
磁盘爆满往往发生在深夜或周末,人工巡检反应太慢。
- 阈值设置:使用Zabbix、Prometheus或云厂商自带的监控,设置两个告警:
- 警告:磁盘使用率超过80%
- 严重:磁盘使用率超过90%
- 告警渠道:绑定钉钉群、企业微信、电话通知,确保值班人员能立刻响应。
- 趋势预测:用Prometheus的
函数预测磁盘还有多久写满,提前告警,而不是等到已满。
predict_linear
定期清理脚本要落地
光有监控还不够,需要自动化的清理脚本配合cron执行。
- 每天凌晨清理:
crontab -e添加任务:0 4 /usr/local/bin/cleanup-disk.sh - 示例:
- 删除超过30天的游戏日志压缩包
- 清空临时文件目录
- 自动执行数据库binlog清理
- 检查磁盘使用率,如果仍超过90%则触发紧急告警
磁盘写满游戏运维费用与容量规划
选择磁盘类型降低长期成本
游戏服务器不同数据对磁盘性能要求不同,混用不同类型能省钱且避免浪费。
- 系统盘:高频读写,建议用SSD,容量50-100GB即可。
- 数据盘:游戏日志、玩家统计数据、数据库,SSD适合数据库,HDD适合日志归档,将日志文件单独挂载到一块便宜的HDD或对象存储,能显著降低磁盘写满游戏运维费用。
- 对象存储:超过3天的日志可以冷备到对象存储,比如S3、OSS,存储费用极低,读取按量计费,需要时再拉回。
扩容策略与预算控制
云服务器扩容很方便,但紧急扩容和日常扩容的价格差异不大,主要区别在于是否需要停机。
- 在线扩容:多数云厂商支持系统盘和数据盘在线扩容,无需重启,但扩容后需要执行
resize2fs或xfs_growfs才能生效,这部分操作涉及费用,建议提前在控制台完成。 - 预留空间:建议游戏服务器磁盘使用率不超过70%,留出30%的缓冲区应对突发流量或日志暴增,对于华东地区游戏服务器,如果日志量每天10GB,预计30天,则至少预留400GB,加上系统盘,总容量宜在500GB以上。

上海服务器磁盘解决方案
通常提供每小时计费的弹性扩容,适合流量波动大的游戏。
容量规划要结合业务增长
- 按峰值预估:根据历史数据,计算最大日写入量,预留1.5倍空间。
- 定期复盘:每季度检查一次磁盘使用率,如果连续两个月超过70%,就要提前扩容或优化日志策略。
- 自动化扩容:结合云厂商API,当磁盘使用率超过85%时自动触发扩容脚本,避免人工干预。
服务器磁盘写满常见问题解答
磁盘已经写满,游戏服务崩溃,没有备份,怎么恢复?
先不要重启,用lsof | grep deleted找出已删除但仍在占用句柄的文件,用truncate将其清空,空间会立即释放,如果找不到,可以挂载一块新磁盘到临时目录,将游戏进程的关键数据目录软链接到新盘,然后重启进程,倒腾数据虽然繁琐,但多数情况下可以救回数据。
如何设置磁盘监控告警,避免玩家掉线?
推荐使用Prometheus + Node Exporter,告警规则设置为:disk_usage_percent > 80持续5分钟触发警告,disk_usage_percent > 90持续1分钟触发严重告警并自动执行清理脚本,告警通知通过Webhook推送到游戏运营群,值班人员可以立即远程登录处理,多数云厂商也提供免费的云监控,设置安全起见,建议同时保留本地监控防止云监控失效。
游戏日志保留多久合适?成本如何控制?
不同游戏类型差异较大,一般运营日志保留30天,合规日志保留90天,超过30天的日志建议压缩后归档到对象存储,存储成本只有云盘的十分之一左右,如果使用日志分析平台,比如ELK,可以实时消费日志后直接丢弃源文件,节省大量磁盘空间。