5.4 网络问题排查工具箱与速查手册
基础三件套
| 工具/命令 | 用途 | 触手可得 |
|---|---|---|
stat net |
实时带宽、ping、丢包、TickRate | 控制台一行 |
stat game / stat unit |
线程耗时(游戏/渲染/物理) | 区分「网络卡」还是「机器卡」 |
showdebug replication /相关 cvar |
复制对象数、相关 Actor 列表 | 控制台 |
进阶:
- 网络仿真(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/using-network-emulation-in-unr-ca3f):模拟延迟/丢包/抖动——开发期造差网络
- 网络性能分析器(Network Profiler,https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/using-the-network-profiler-in-8330):抓一段时间的网络包,看哪些 Actor/属性最费带宽
- Unreal Insights 的 Networking Insights(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/networking-insights-in-unreal-e91d):帧级 trace 网络事件,与 CPU 帧时间对齐分析
- 网络调试官方汇总:「网络调试」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/network-debugging-for-unreal-e-2b2a)「测试和调试多人游戏」(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/testing-and-debugging-networke-1645)
网络性能分析器实战步骤
- 控制台
netprofiler start→ 玩一段典型场景(团战、跑图)→netprofiler stop - 打开分析器,按「Out bytes」排序,找 Top 10 Actor
- 点开 Actor,看是哪些属性在刷:通常是某个高频属性或一个胖结构体
- 对 Top 1~3 逐个优化(降频率、条件复制、拆结构体、FastArray)
- 重测,直到带宽预算达标
| 症状 | 第一步看什么 |
|---|---|
| 「服务器 CPU 高、客户端卡」 | stat unit:服务器 TickRate 有多低 |
| 「带宽报警」 | 网络分析器 Top Actor + 属性排序 |
| 「玩家瞬移」 | 是预测校正(日志+CMC)还是复制频率过低 |
| 「Join 后黑屏/无角色」 | 服务器日志的 Login 链 + 客户端 Role 打印 |
| 「只有部分玩家看不到 X」 | 相关性配置 / NetCullDistanceSquared / bAlwaysRelevant |
| 「跨端血量不一致」 | 是否客户端直接改了复制属性(查写入点) |
日志规范(排查效率的根基)
每条关键日志带三要素:端(Server/Client+编号)、Actor、Role:
UE_LOG(LogNetGame, Warning, TEXT("[C%d] %s OnRep_Health: %s | Role=%d"),
LocalPlayerNum, *GetName(), *FString::SanitizeFloat(Health), (int32)GetLocalRole());
这套日志在「跨端状态不一致」类问题里是唯一快速定位的手段。生产环境关键路径建议用 Warning 级以上,确保上传。
常见错误信息对应表
| 日志/现象 | 根因 |
|---|---|
Net(Guid related) guide mismatch |
客户端本地按 Guid 找不到对象(常见于 Mod/版本不一致) |
Unable to find Function ... |
RPC 函数在两端版本不同(热更不同步) |
Login took too long |
服务器 TickRate 低或登录流程同步阻塞(必须异步化) |
| Reliable 队列满警告 | 高频 Reliable RPC(见 3.2 血泪案例) |
压测
上线前的对局压测:
- 用
-server起专用服,开 N 个 headless 客户端登录(脚本/AutomationTool 驱动) - 监控服务器 TickRate(目标 ≥ 30)、上行带宽、内存
- 持续 2 小时观察有无内存泄漏(Actor 池是否回收)与 GC 抖动
心得:压测别省。我们项目上线前一周跑 8 小时满服压测,提前发现「Actor 池在玩家反复进出后缓慢泄漏」——这种问题只有长时间满负载才跑得出来,线上暴露就是事故。
