游戏卡顿白皮书 › L1 客户端游戏进程
游戏安全模块(反作弊)扫描 Anti-cheat scan and heartbeat
原因 ID cg-anticheat · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
为防外挂,与游戏一起运行的安全模块会定期扫描。扫描太重,或与安全服务器之间的心跳(定期发送的存活确认信号)延迟,就会一卡一卡或掉线。
起因 安全模块定期扫描游戏内存、正在运行的程序和驱动 → 结果 扫描期间游戏线程停住,或者心跳没能按时发出 → 画面表现 按固定间隔顿一下,严重时弹出安全错误提示并掉线
- 症状
- 一卡一卡, 卡住, 掉线
- 因素
- 停顿
- 谁会遇到
- 只有我
- 何时出现
- 固定周期, 刚登录/维护结束后, 偶尔随机
- 负责方
- 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
- 研发团队要做的事
- 客户端:重量级扫描放到游戏线程之外,拆成小块分批执行;按安全模块版本对比一卡一卡、掉线的统计(更新后集中出现就转交安全模块厂商)。服务器:允许心跳偶尔晚到一两次。
- 数值参考
- 轻量扫描通常不到 1 ms,但在游戏线程里跑的重量级扫描,视实现不同,一次可能占用几十到几百 ms。
- 监控图上
- 周期性尖峰 · 帧耗时、反作弊踢出次数
- 查看位置
- 在 PresentMon 帧耗时中测量冲高的间隔,并按安全模块版本、配置统计服务器收到的反作弊踢出原因(EOS 为 ClientActionReason 的 AuthenticationFailed / Authentication Timed Out 等)
- 确认依据
- 与游戏内情况无关,按固定间隔反复出现短暂停顿;安全模块更新后,特定配置上一卡一卡、认证超时被踢的情况增多
- 排除依据
- 与安全模块版本无关、所有配置上间隔都一样,看“客户端垃圾回收”或“后台进程占用 CPU”
- 确认手段
- 需要游戏服务器/客户端的日志和指标
- 深入了解
- 安全模块以驱动形式深入操作系统底层,有时会与杀毒软件、游戏内覆盖层、其他游戏的安全模块冲突。安全模块更新后,如果只有特定配置的玩家集中反馈一卡一卡、掉线,应首先怀疑这个原因。
出处
- Using the Anti-Cheat Interfaces Epic Games
服务器在规定时间(RegisterTimeout)内没收到客户端的反作弊消息,就以认证超时踢出(常见原因是客户端因加载而停住);如果是最近的模块更新有问题,就回退到旧模块 - PresentMon Capture Application (README-CaptureApplication.md) Intel
用 FrameTime(帧与帧之间的 CPU 时间)录制每帧耗时
相关原因
同一层:L1 客户端游戏进程
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片