跳转到指南

文档 9.6.24

设置与性能

请在自己的服务器上测量。玩家、资源、录制和索引都会影响负载;不保证零延迟。

先观察再处理#

启用踢出或封禁前,将检测结果与正常游戏行为对照。测试传送、重生和合法发放武器。客户端信号不能授权金钱、武器或管理员权限。

控制高成本操作#

未经测试不要启用深度扫描或自动隔离。限制同时录制数量。桥接空闲时不读取游戏数据库,但 HTTPS 和其他模块仍消耗资源。使用 FiveM profiler 比较变更前后性能。

建立可复现的基准#

修改配置前记录典型游戏会话的性能,记下玩家数量、artifact、资源版本和活动。安静角色扮演、拥挤车库与战斗负载不同。每次只改一个设置,之后用相同活动比较。CPU 时间、hitch 和查询行为比固定 FPS 提升承诺更有意义。

命令记录有限样本,完成后再查看并定位峰值的资源和线程。不能把每次卡顿都归因于 AC。私下保存精确改动与前后结果;短样本无法覆盖所有高峰。

profiler record 500
profiler status
profiler view

tosunac_doctor

控制成本并保留保护#

可选深度扫描、自动隔离应有控制地测试。限制同时证据捕获,生产环境关闭 debug。缩短检测或轮询间隔会增加重复工作。

  1. 分别测空闲和单次读取。桥接空闲不读游戏 SQL,但 HTTPS 与其他模块仍消耗资源。
  2. 大列表按页读取,索引拒绝交由数据库维护者检查。
  3. 多人同时观看前先测一次测试账户捕获。
  4. 负载增加时恢复所改设置并重跑同场景,再决定其他修改。

结合场景调整处罚#

先观察敏感检查并测试正常玩法。日志不代表必须封禁所有相关玩家。核对角色选择、复活、传送、警察装备和脚本武器,使用针对性集成而非永久全面豁免。

tosunac_doctor 报告实际风险值,不修改设置。审阅严厉处罚、关闭防护、debug 与 fail-open 提示。面板可能覆盖本地默认值,应核对实际生效设置。

豁免可能隐藏投诉而没有解决原因。给临时例外记录日期与待修脚本,集成验证后移除,再跑验收玩法并比较日志。

  • 每次改一个值,记录理由、审核者及原值。
  • 对比重复检测与合法脚本动作和时间。
  • 改处罚、core 或背包后重测相关玩法。
  • 新增误报先恢复原值,解决原因后再加强。

用相同负载比较调整前后#

每次测试记录玩家数量、artifact、AC、框架与背包版本,以及面板正在执行的操作。先测没有面板请求的安静时段,再测角色选择、车库和正常战斗。使用 profiler record 500 取得有限样本,等待 profiler status 显示完成后再分析。

在 profiler view 中找出 CPU 峰值对应的资源和线程,同时查看反复出现的长执行与 hitch 警告,不要只看平均值。一次仅改一个设置,并在类似人数下重复相同流程。高峰时才发生的问题需要另一个有代表性的会话;同时修改多个设置无法明确归因。

单独测量数据库桥接工作#

健康通信不等于桥接在空闲时持续查询游戏数据库中的玩家列表。实现同时只处理一个外发请求,常规健康周期约十秒,失败时逐步延长等待,最多两分钟。这描述当前实现,不是可调整的速度选项,也不是保证的面板刷新期限。

在服务器控制台使用 tosunac_db_status 查看本地状态。把一页玩家读取与空闲样本比较。列表按每页 25 条记录和有限响应大小处理,而非一次搬运整个数据库。出现 unsupported_index 或 schema_unavailable 时,请有权限的数据库管理员检查支持的表结构与索引,不要强行扩大查询。

记录验收条件和回退办法#

维护前为自己的服务器定义条件,例如无新的持续 hitch、正常游戏流程完成、显著耗时增加有解释。统一 FPS 目标无法覆盖玩家设备、其他资源和数据库差异。性能样本更快,也不能说明误报可以接受。

记录旧值、新值、测试时间、玩家数及影响。负载上升时,仅恢复刚改变的设置并重测。不要为了测量而修改余额。给支持提供已清理的性能摘要和 doctor 警告。恢复生产后再观察一次普通会话,确认测试的特殊条件没有掩盖实际负载。

区分单次峰值与重复工作#

不要只因某行耗时最高就改设置。观察重复运行的资源、线程与对应动作。加入时的一次准备不同于每 tick 工作。车库仅首次打开出现峰值,应比较后续打开。如果其他资源也更新,差异不能只归因 AC;短样本也不覆盖全部高峰。

同时记录时长、频率和动作。大量短任务会累计耗时,单个长任务可能与 hitch 同时发生。服务器 profiler 时间不是客户端 FPS。把客户端卡顿与同一服务器时段比较;延迟与加载资源可能需另查。不理解时提供清理过的相关片段与场景寻求支持,不要盲目缩短全部检测周期。

测量观察工具本身的成本#

监控与诊断也产生工作。长记录、多次面板读取、证据图片及持续 debug 同开会难以归因。先限制工具,再比较仅一种打开的样本。多标签刷新并不能更好测量同一动作,错开的请求和旧结果还会混淆观察。余额写权限不是压力测试工具。

记录员工会话数、页面及证据请求数,分别比较正常会话、一次玩家读取与必要的一次截图。取得结果后关闭额外诊断,再观察正常状态。收集足够定位任务的数据,而非最多数据。这体现当前服务器,不保证其他硬件或人数同样表现。维护结束时确认临时诊断已关闭。

每天保留一份简短健康记录#

每天在同一个有代表性的时段,保留简短的维护记录,无需持续运行 profiler 或连续截图。记录已安装版本、当前玩家数、新出现且反复发生的启动错误,以及必要时的桥接连接状态。如果员工操作仍在等待,应检查其状态,而不是重复相同读取来判断是否就绪。检查一个正常角色流程,并在需要时读取一页,比为了收集更多数据而遍历全部历史,更适合作为日常维护范围。

设置没有变化时,不必每天重新保存整份配置。将新的 doctor 诊断警告与之前记录比较,并记录原因;不要认为 doctor 会自动修复问题。临时例外到达复查日期时,应与负责人一起评估,而不是假定系统会自动到期。没有新异常时,以观察到的正常状态结束记录。如果出现新的 hitch 或错误,只针对相关时间与操作补充测量。这是一项管理员可以执行的日常习惯,并非新增的自动任务或面板功能。

分别测量历史数据增长与玩家负载#

记录的角色、车辆与检测历史可能不断增加,同时在线玩家数也可能上升。如果玩家数相同,而检测历史增长到十倍,应分别计时首个日志页面、后续页面与一个已知角色的详情。如果历史数据量不变而在线人数增加,则应评估正常游戏流程。不要同时改变两个变量,就把差异全部归因于 AC。面板结果是临时的,并不表示源数据库中的封禁或检测表会自动清理。

首次请求可能包含表元数据的准备,后续请求则可能受益于缓存;应分别记录冷缓存与热缓存样本。受支持的分页与索引限制一次搬运整个历史库,但不会消除存储增长。应在同一上下文中测量下一页,而不是反复加载第一页。如果查询耗时明显增加,请数据库维护人员在测试副本中检查执行计划与索引。删除历史、重命名表或导出全部内容,不是性能测量。维护决策应同时依据数据量、玩家数与被测操作。

为自定义事件注册服务器验证#

修改客户端豁免状态不会创建服务器签发的全面豁免。本地菜单或集成只获得有限的移动与可见性容错,金钱、武器和事件权限仍需单独验证。只有可信服务器资源可签发较广泛的临时豁免。

验证管理员权限及撤销#

ACE、管理员标识与面板授权在服务器端验证。all 不是标识或授权。allowedIds 必须填写来自服务器玩家标识列表的完整 license:...、discord:... 或 fivem:...。

  1. 给测试管理员最小必要权限,并验证菜单和一个允许的操作。
  2. 撤销面板授权后再次测试同一玩家;新版默认约每五秒轮询,网络延迟需单独观察。
  3. 同时检查独立的 ACE/admins.lua 授权;在线玩家遥测不是授权来源。
  4. 普通测试玩家应保持无权访问;敏感操作只使用测试数据。
ts.AdminMenu.allowedIds = {
    "license:YOUR_EXACT_PLAYER_IDENTIFIER",
    "discord:YOUR_DISCORD_USER_ID"
}
# Examples are placeholders, not grants.

避免重启时重复进行昂贵分析#

每次启动都会核对资源内容的 SHA256 指纹。文件和扫描策略未变的资源会复用服务器 KVP 中经过认证的结果,不再重复昂贵的签名和事件分析。文件、例外或规则变化会使相关分析失效并重新执行。指纹检查仍需读取文件;不保证固定的 resmon 数值。

  1. 正常更新时保留 KVP 缓存;损坏或无法验证的记录会重新分析。
  2. 启动目录收集 Lua/JS 中明确声明的事件名。动态名称、不可读或 escrow 文件及 DLL 不会被认定为已完整扫描。
  3. 手动自动配置会等待安全分析完成。不完整、可疑、已变化或超时的资源不会自动获准。
  4. 在测试服务器检查玩家加入、正常游戏和管理员操作;结合玩家数量与框架负载评估 resmon。