识别性能问题通常意味着挖掘三个类别之一:帧率(计算)、内存或加载时间。
Roblox 有多个工具来识别性能问题,其中一些可以在 Roblox 客户端(和 Studio)中使用,而一些只能在 Studio 中使用。 与您直接观察客户端行为相比,您必须使用工具诊疗服务器问题。
诊断工具
工具 | 描述 | 地点 | 键盘快捷方式 | 环境 |
开发者控制器 | 带有实时日志消息、错误和详细信息的控制器。它对于查看内存使用率、关键服务器健康状态、脚本性能统计和启动客户或服务器微调器的有用。 | 工作室 | F9 | 实时会话、Studio 测试 |
微型 profiler | 一个调试工具,可以显示每个框架中的任务是否花费计算时间。它可以生成垃圾调查,显示每个框架的精确分解,这对于确定特定框架导致性能问题的分析有助。您可以在客户端或服务器上运行调试工具,这取决于有问题的一方。 | 在体验中 | Ctrl Alt F6 ( ⌘ 1>⌥1> 3> F63> ) | 实时会话、Studio 测试 |
性能统计栏 | 一个工具栏,包含基础性能统计,包括内存使用率、CPU、GPU、网络数据发送和接收、以及网络延迟时间。 | 在体验中 | Ctrl Alt F7 ( ⌘ 0>⌥0> 2>F72> ) | 实时会话、Studio 测试 |
调试统计 | 覆盖图像、物理、网络交通和 FPS 的详细信息。 | 在体验中 | Shift F1,Shift,F2,1> Shift 1>,3> F3 3>,6> Shift 6>,8> F48>,1> Shift1>,3> F53> | 实时会话、Studio 测试 |
性能仪表板 | 一个带有客户端和服务器端使用率、客户端帧评分、服务器心跳和崩溃率的聚合图表的仪表板。它对于分析性能趋势的时间变化很有用。请参阅监控性能。 | 创建者仪表板 | 无 | 实时会话 |
服务器计算
服务器心跳为所有体验的 60 FPS 限制,因此较低的值可能表示性能问题。要检查服务器心跳:
使用 开发者控制器 - 在 服务器工作 选项卡中,扩展 心跳 行并检查 1>每秒步1> 值,代表您体验的心跳。
使用服务器 MicroProfiler - 查看每个框架的长度,以确定有些是否超过 16.67ms。
另一个显示降低的服务器心跳的症状是增加延迟 (通常称为 ping)。 越长服务器每个框架完成计算任务的时间, 就越长它取决于网络数据发送和接收的时间。 要检查所有连接到服务器的玩家的平均 ping ,请前往开发者控制中的服务器统计选项卡。
客户端计算
默认客户端的最高帧率上限为60 FPS。 但是,用户可以将其提升到240 FPS。
框架率在设备之间存在着巨大的差异。例如,高端的 PC 可能能够“暴力”计算问题,并且只会遇到不可见的框架率下降。如果您在低端设备上测试,问题往往会更严重,从而更容易发现。
要检查您的体验帧率:
在客户端,按下 Shift F5 显示调试统概括。
在 Studio 的 视图 选项卡中,选择 统计 > 概要 来启用调试统计。
使用 MicroProfiler ,您可以检查图形,以确认框架是否超过 16.67 毫秒。
记忆
有几种方法可以检查体验的内存使用率:
- 打开开发者控制器并切换到 记忆 选项卡。 此选项卡提供记忆的分配方式的详细说明。 使用客户端而不是 Studio以获得最准确的读取。
- 启用客户端设置菜单中的 性能统计 视图,从而看到客户端总体内存使用率。
高内存使用率不一定是问题的表现,但一些可能需要您调查的提示是:
- 客户端在 性能仪表板 上显示的客户端崩溃的比例,尤其是突然上升的 uptick 与更新协调。一些崩溃的预期数量,但您应该调查您的崩溃率是否在 2-3% 以上。
- 在您想要体验协助持的设备上测试时发生错误。
- 您的服务器内存使用率超过 3 GB。
体验上的内存消耗大部分是由图像和网格等资产加载到图形内存以便能够渲染。在 开发者控制台 中,您可以查看图形上的内存消耗由资产下列标签:
- GraphicsMeshParts - 图形网格的内存。
- 图形纹理 - 图形内存由纹理消耗。
加载次数
没有内置工具可用于检查加载时间,但因为它们不需要毫秒级精度,所以停止计时通常是您了解您当前基础架构和检查您是否进行了有效的改进的唯一需要。您可以使用 ReplicatedFirst 中的客户脚本来获得一些关于您如何影响加载时间的更改的感觉,但此脚本不提供完整的端到端测量:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- 四个十六进制位置
print("Game loaded in " .. roundedLoadTime .. " seconds.")
print("Number of instances loaded: " .. #game.Workspace:GetDescendants())
end)
了解有关更多信息,请启用 Studio 设置 > 网络 > 打印加入大小 ,它打印的是体验 Studio 时的前 20 个实例按大小和一个百分比的实例类型,当您在 Studio 中启动体验时启用。