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

游戏卡顿白皮书 › L9 服务器游戏进程

实体堆积(未清理的物品/召唤物) Entity / timer buildup over uptime

原因 ID sp-entity-buildup · 主责 研发团队·服务器开发

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

本该消失的地面物品、召唤物、已结束的定时器没有被清理而不断堆积,服务器开得越久,每个 tick 要做的事就越多。

起因 地面物品、召唤物、过期定时器、空队伍信息没有及时删除 → 结果 每个 tick 要遍历的列表一天比一天长 → 画面表现 维护刚结束时正常,过几天后只有那台服务器或那个区域越来越迟钝

症状
慢动作, 一卡一卡, 操作延迟
因素
停顿
谁会遇到
全服, 特定地点/分线
何时出现
开得越久越严重
负责方
主责 研发团队·服务器开发
研发团队要做的事
把各区域的实体数记为指标观察趋势;给每个实体设寿命和数量上限;定期清理。
数值参考
每个 tick 都把所有实体遍历一遍的服务器,实体数翻倍,这部分的 tick 耗时也会翻倍。
监控图上
缓慢上升后骤降 · 各场景实体数、服务器 tick 耗时
查看位置
以比维护周期更长的时间范围(几周)查看各场景、各服务器的实体数(地面物品、召唤物、定时器)和 tick 耗时
确认依据
维护后从低位起步的实体数和 tick 耗时每天上涨,在维护、重启时骤降,如此反复,期间内存充足
排除依据
tick 不变而只有内存持续上涨,看“内存泄漏”
确认手段
需要游戏服务器/客户端的日志和指标
深入了解
和内存泄漏一样,服务器开得越久越糟,区别在于内存充足、只有 tick 耗时在增加。实体数曲线随维护周期呈锯齿状,就是这种情况。

出处

  1. Actor Ticking in Unreal Engine Epic Games
    Actor、组件如果不单独设定间隔,每帧都会 tick 一次;不需要时可以关闭 tick
  2. AActor::SetLifeSpan Epic Games
    给 Actor 设定寿命,到期时会自动销毁

相关原因

同一层:L9 服务器游戏进程

其他层中同样导致“慢动作”的原因

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