한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L1 客户端游戏进程

游戏安全模块(反作弊)扫描 Anti-cheat scan and heartbeat

原因 ID cg-anticheat · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发

在含图示和实验的完整版中打开此卡片 →

为防外挂,与游戏一起运行的安全模块会定期扫描。扫描太重,或与安全服务器之间的心跳(定期发送的存活确认信号)延迟,就会一卡一卡或掉线。

起因 安全模块定期扫描游戏内存、正在运行的程序和驱动 → 结果 扫描期间游戏线程停住,或者心跳没能按时发出 → 画面表现 按固定间隔顿一下,严重时弹出安全错误提示并掉线

症状
一卡一卡, 卡住, 掉线
因素
停顿
谁会遇到
只有我
何时出现
固定周期, 刚登录/维护结束后, 偶尔随机
负责方
主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
研发团队要做的事
客户端:重量级扫描放到游戏线程之外,拆成小块分批执行;按安全模块版本对比一卡一卡、掉线的统计(更新后集中出现就转交安全模块厂商)。服务器:允许心跳偶尔晚到一两次。
数值参考
轻量扫描通常不到 1 ms,但在游戏线程里跑的重量级扫描,视实现不同,一次可能占用几十到几百 ms。
监控图上
周期性尖峰 · 帧耗时、反作弊踢出次数
查看位置
在 PresentMon 帧耗时中测量冲高的间隔,并按安全模块版本、配置统计服务器收到的反作弊踢出原因(EOS 为 ClientActionReason 的 AuthenticationFailed / Authentication Timed Out 等)
确认依据
与游戏内情况无关,按固定间隔反复出现短暂停顿;安全模块更新后,特定配置上一卡一卡、认证超时被踢的情况增多
排除依据
与安全模块版本无关、所有配置上间隔都一样,看“客户端垃圾回收”或“后台进程占用 CPU”
确认手段
需要游戏服务器/客户端的日志和指标
深入了解
安全模块以驱动形式深入操作系统底层,有时会与杀毒软件、游戏内覆盖层、其他游戏的安全模块冲突。安全模块更新后,如果只有特定配置的玩家集中反馈一卡一卡、掉线,应首先怀疑这个原因。

出处

  1. Using the Anti-Cheat Interfaces Epic Games
    服务器在规定时间(RegisterTimeout)内没收到客户端的反作弊消息,就以认证超时踢出(常见原因是客户端因加载而停住);如果是最近的模块更新有问题,就回退到旧模块
  2. PresentMon Capture Application (README-CaptureApplication.md) Intel
    用 FrameTime(帧与帧之间的 CPU 时间)录制每帧耗时

相关原因

同一层:L1 客户端游戏进程

其他层中同样导致“一卡一卡”的原因

查看含图示和实验的原卡片