1. 首先确认问题范围:是单个房间/玩家,还是所有比赛都不写战绩。操作步骤:
- 步骤1:记录出现问题的时间点和玩家ID/房间ID。
- 步骤2:在服务器上运行:sudo journalctl -u your-game-service --since "2026-07-19 00:00" | tail -n 200 ,查看服务报错。
- 步骤3:查看游戏服务器日志目录(例如 /var/log/yourgame/ 或 游戏安装目录/logs),用 tail -f 实时观察重现时的输出。
2. 确认所有相关服务(游戏进程、匹配服、写库服务、队列消费者)都在运行。操作命令举例:
- 在Linux上:ps aux | grep yourgame;systemctl status your-game-service。
- 若使用容器:docker ps;docker logs container-name --since 1h。
- 若版本不一致,按部署流程回滚/更新到相同版本,并重启服务:sudo systemctl restart your-game-service。
3. 很多“没战绩”是写库失败造成,排查步骤:
- 步骤1:登录数据库,查看最近写入失败的错误:mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G" 或查看 MySQL/Postgres 日志。
- 步骤2:用查询验证表是否有插入动作:SELECT * FROM match_results WHERE match_id='xxx';
- 步骤3:若连接失败,检查配置文件中的 DB_HOST、DB_PORT、用户名密码是否正确;测试连接:mysql -h DB_HOST -P DB_PORT -u user -p。
- 步骤4:若写入超时,查看慢查询/锁:SHOW PROCESSLIST;优化事务或增加连接池。
4. 游戏服务可能因端口被阻断导致无法通知后端写入。操作步骤:
- Linux 常用检查:ss -tulnp | grep :YOUR_PORT 或 netstat -tulnp。
- 检查防火墙:sudo ufw status 或 sudo iptables -L -n;若使用 firewalld:sudo firewall-cmd --list-all。
- 放行端口示例:sudo ufw allow 12345/tcp 或 sudo firewall-cmd --permanent --add-port=12345/tcp && sudo firewall-cmd --reload。
- 若在云主机(5E)控制台有安全组设置,确保相关端口在控制台和系统防火墙都已开放。
5. 写入文件型战绩(本地文件或缓存)需检查权限:
- 步骤1:确认写目录属主和权限:ls -ld /path/to/result_dir;若属主不对,sudo chown -R gameuser:gameuser /path/to/result_dir。
- 步骤2:检查磁盘是否满:df -h;若 inode 用完:df -i。
- 步骤3:临时可赋予写权限进行测试:sudo chmod -R 775 /path/to/result_dir(生产环境慎用)。
6. 若战绩通过队列写入,需确认队列服务(Redis/RabbitMQ)和消费者正常:
- 步骤1:查看消费者进程:ps aux | grep worker;重启消费者:systemctl restart queue-worker。
- 步骤2:检查队列长度:redis-cli LLEN queue_name 或 rabbitmqctl list_queues。
- 步骤3:若队列堆积,查看消费者日志定位处理异常并修复代码或增容消费者。
7. 问:为什么比赛结束但数据库没有记录?
答:最常见原因包括服务未调用写库接口、防火墙/网络阻断、数据库写入失败(权限/连接池/锁)、或队列消费者宕机。按上文顺序:先看游戏服务器日志 -> 测试DB连接 -> 检查防火墙端口 -> 查看队列是否堆积,逐项排除。
8. 问:如何快速定位是后端问题还是客户端问题?
答:在服务器端复现流程:从客户端触发一局结束,实时 tail 服务日志观察是否收到结束事件;若服务器无记录,问题在传输或客户端未正确发送;若服务器收到但未写入,则为后端问题(DB/队列/权限)。可使用 tcpdump -i eth0 port YOUR_PORT -w capture.pcap 抓包确认流量。
9. 问:修复后如何验证战绩可靠写入?
答:完成修复后进行多步验证:1) 重启相关服务并清空测试队列;2) 发起多场测试(10-50局)并记录match_id;3) 实时监控日志和队列长度;4) 在数据库中核对每个match_id是否有记录并检查完整字段;5) 若使用异步或跨服同步,再次确认下游服务也正确接收并写入。
