游戏卡顿白皮书 › L9 服务器游戏进程
进入密集区域时实体生成激增 Spawn burst when entering a crowd
原因 ID sp-spawn-burst · 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
传送到挤满人的城镇时,服务器要把新进入视野的几百人的外观、装备、状态一次性发过来。
起因 通过传送、登录、换线,突然出现在人多的地方 → 结果 一次性生成并发送几百人的全部信息,自己的电脑也要一次性加载 → 画面表现 刚到达时短暂停顿,角色一个个慢慢出现,操作延迟
- 症状
- 卡住, 操作延迟, 快进
- 因素
- 停顿, 延迟
- 谁会遇到
- 只有我, 特定地点/分线
- 何时出现
- 移动中/切换地图时, 刚登录/维护结束后
- 负责方
- 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
- 研发团队要做的事
- 服务器:按由近到远的顺序分到多个 tick 发送;缓存外观信息。客户端:在加载画面期间预先接收;把收到的角色分到多帧创建。
- 数值参考
- 一个人的外观、装备、buff 信息为 300 字节的话,500 人约 150 KB,相当于平时一个 tick 发送量(几 KB)的几十倍在一瞬间涌出。
- 监控图上
- 开服/维护后激增 · 每个连接的发送字节数、客户端帧耗时
- 查看位置
- 到达人多的地点后几秒内,通过该连接发送的字节数和包数(服务器日志)与客户端帧耗时(网络状态面板、客户端日志)
- 确认依据
- 到达后该连接的发送量飙到平时一个 tick 的几十倍再回落,同一瞬间客户端帧耗时也冲高
- 排除依据
- 移动到人少的地方也同样停顿,看“场景切换(服务器间迁移)”或客户端加载
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Detailed Actor Replication Flow in Unreal Engine Epic Games
首次打开 Actor 通道时一并发送初始位置、旋转等信息;连接饱和时,剩余的 Actor 推到下一个 tick - Actor Priority in Unreal Engine Epic Games
按距离和视线方向排列优先级,先发送近处、看得见的 Actor
相关原因
同一层:L9 服务器游戏进程
其他层中同样导致“卡住”的原因
查看含图示和实验的原卡片