識別性能問題通常意味著深入了解三個類別之一:幀率(計算)、記憶體或加載時間。
Roblox 擁有多種工具來識別性能問題,其中一些在 Roblox 客戶端(因此也在 Studio 中)可用,而另一些僅在 Studio 中可用。雖然您可以直接觀察客戶端行為,但必須使用工具來診斷伺服器問題。
診斷工具
| 工具 | 描述 | 位置 | 鍵盤快捷鍵 | 環境 |
|---|---|---|---|---|
| 開發者控制台 | 一個具有實時日誌消息、錯誤和有關記憶體、網絡和腳本性能的詳細信息的控制台。它對於查看記憶體消耗、關鍵伺服器健康統計、腳本性能統計以及啟動客戶端或伺服器 MicroProfiler 很有用。 | Studio 遊戲中 | F9 | Studio 測試 實時會話 |
| MicroProfiler | 一個調試工具,分解每幀花費多少計算時間在任務上。它可以生成分析的轉儲,顯示單個幀的精確分解,幫助識別導致性能問題的具體任務。您可以在客戶端或伺服器上運行分析器,具體取決於哪一方存在問題。 | Studio 遊戲中 | CtrlAltF6 (⌘⌥F6) | Studio 測試 實時會話 |
| 場景分析 | 提供有關客戶端和伺服器場景使用的資源以及哪些實例負責該資源使用的比較信息。 | Studio | N/A | Studio 測試 |
| 性能統計 | 一個工具欄,顯示基本性能統計,包括記憶體消耗、CPU、GPU、發送和接收的網絡數據以及延遲時間。 | 遊戲中 | CtrlAltF7 (⌘⌥F7) | Studio 測試 實時會話 |
| 調試統計 | 顯示有關圖形、物理、網絡流量和 FPS 的詳細信息的覆蓋層。 | Studio 遊戲中 | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Studio 測試 實時會話 |
| 網絡模擬 | 模擬現實世界網絡條件(如延遲、抖動和數據包丟失)以進行連接的屬性。 | Studio | AltS(⌥S) | Studio 測試 |
| 性能儀表板 | 一個儀表板,實時顯示客戶端和伺服器的記憶體使用情況、客戶端幀率、伺服器心跳和崩潰率的聚合圖表。它有助於分析隨時間變化的性能模式。請參見 監控性能。 | 創作者儀表板 | N/A | 實時會話 |
伺服器計算
伺服器心跳對所有遊戲的幀率上限為 60 FPS,因此較低的值可能表示性能問題。要檢查伺服器心跳:
使用 開發者控制台 - 在 伺服器作業 標籤中,展開 心跳 行並檢查 每秒步數 值,該值表示您的遊戲的心跳。
使用 MicroProfiler,您可以檢查圖表以查看幀是否花費超過 16.67 毫秒。
伺服器心跳下降的另一個症狀是延遲增加(通常稱為 ping)。伺服器每幀完成計算任務所需的時間越長,處理從客戶端發送和接收的網絡數據所需的時間就越長。要檢查連接到伺服器的所有玩家的平均 ping,請轉到 開發者控制台 的 伺服器統計 標籤。
如果在您 改善性能 後伺服器心跳仍然較低,則您的遊戲可能需要比其伺服器默認獲得的更多 CPU。您可以通過 擴展計算服務 預留更多。
客戶端計算
默認的客戶端幀率上限為 60 FPS。然而,Windows 用戶可以將其幀率上限提高到 240 FPS。
幀率在設備之間差異很大。例如,高端 PC 可能能夠“強行”解決計算問題,並且只會經歷微不足道的幀率下降。如果您 在低端設備上測試,問題往往更嚴重,因此更容易注意到。
要檢查您的遊戲的幀率:
在客戶端中,按 ShiftF5 顯示調試統計摘要。
從 Studio 的 窗口 ⟩ 性能 菜單中,切換 統計 以啟用調試統計。
使用 MicroProfiler,您可以檢查圖表以查看幀是否花費超過 16.67 毫秒。
伺服器記憶體
請儘量將伺服器記憶體使用量保持在 50% 以下。總伺服器記憶體使用以下公式計算:
6.25 GiB + (100 MiB * 最大連接玩家數)
例如,連接 30 名玩家的伺服器的總記憶體約為 9.18 GiB。伺服器在玩家連接時獲得記憶體,但在玩家斷開連接時 不會 失去記憶體。如果 10 名玩家離開,伺服器仍然擁有 9.18 GiB 的記憶體,而不是縮減到 8.2 GiB。
當伺服器關閉(例如,當它們空置或作為 更新過程 的一部分時),其替代品將從基本記憶體量開始,並在玩家連接時開始擴展。
客戶端記憶體
檢查遊戲的記憶體使用情況有幾種方法:
- 打開 開發者控制台 並切換到 記憶體 標籤。該標籤提供有關記憶體分配的詳細信息。使用客戶端而不是 Studio 以獲得最準確的讀數。
- 在客戶端的設置菜單中啟用 性能統計 視圖,以查看顯示總客戶端記憶體使用情況的覆蓋層。
高記憶體使用量不一定表示存在問題,但一些需要您進一步調查的跡象包括:
- 在 性能儀表板 中顯示的客戶端崩潰的顯著百分比,特別是與更新同時出現的突然上升。某些崩潰是預期的,但如果您的崩潰率超過 2-3%,則應進行調查。
- 在您希望遊戲支持的設備上測試時發生崩潰。
遊戲在客戶端的記憶體消耗中,有相當一部分來自加載到記憶體中的資產,例如圖像、網格和音頻文件。在開發者控制台中,檢查 PlaceMemory 下的以下標籤:
- GraphicsMeshParts - 網格消耗的圖形記憶體。
- GraphicsTexture - 紋理消耗的圖形記憶體。
- Sounds - 音頻文件消耗的記憶體。
加載時間
加載時間,也稱為加入時間,是從玩家單擊 播放 到世界渲染並開始遊玩的總時間。在客戶端連接到伺服器後,加入過程按以下順序進行:
- ReplicatedFirst 複製到客戶端,並且其中的任何自定義 加載屏幕 都會出現。
- 玩家角色加載。加載時間在加載屏幕消失並開始渲染世界時結束。
知道哪一步很慢有助於您選擇影響最大的優化。要了解常見原因和修復,請參見 改善性能。
沒有內置工具來檢查加載時間,但因為它們不需要毫秒級的精度,所以通常只需一個秒錶即可了解您當前的基準並檢查您是否做出了實質性的改進。您可以在 ReplicatedFirst 中使用客戶端腳本來了解您的更改如何影響加載時間,但該腳本不提供完整的端到端測量。它在 ReplicatedFirst 複製後開始計時,並在初始複製完成並觸發 DataModel.Loaded 時停止,因此不包括連接到伺服器或加載角色的時間:
local startTime = os.clock()
game.Loaded:Connect(function()
local loadTime = os.clock() - startTime
local roundedLoadTime = math.round(loadTime * 10000) / 10000 -- 四位小數
print("遊戲加載時間為 " .. roundedLoadTime .. " 秒。")
print("加載的實例數量: " .. #workspace:GetDescendants())
end)為了獲得更多見解,請在 Studio 設置 的 網絡 標籤中啟用 打印加入大小分解,以在您在 Studio 中啟動遊戲時打印按大小排序的前 20 個實例及按實例類型的百分比分解。
如果您的加載時間相對於遊戲的顯著大小意外地高,請檢查您的地方是否存在未識別或混淆的腳本。一些來自創作者商店的免費模型包含生成數千個額外實例的腳本,這會顯著增加玩家加入時必須複製的數據量。
在每次優化或更新之前和之後測量加載時間,以便您可以確認其影響並捕捉回歸。突然增加通常意味著最近向 ReplicatedStorage 添加了內容,或者資產更改增加了下載大小。
Ping
Ping(延遲)的兩個主要測量是 網絡 ping 和 數據 ping。
網絡 ping 是從客戶端發送網絡數據包到接收伺服器的回聲回覆的往返時間。它類似於通用 ping 網絡工具報告的 time。
網絡 ping 在 性能統計 欄中可見。它主要受客戶端和伺服器之間的網絡路徑長度影響,並且超出您的控制範圍。然而,您可以在 Studio 中進行遊戲測試時使用 網絡模擬 來模擬 ping 和其他網絡條件。
數據 ping 是從客戶端通過複製系統可靠地發送數據到接收伺服器的複製系統的回聲回覆的往返時間。它包括在客戶端和伺服器的複製隊列中花費的時間,以及丟失或損壞數據包的 TCP 類似重傳。
數據 ping 類似於從客戶端發送可靠的遠程事件,在伺服器上接收它,然後從伺服器向客戶端發送可靠的遠程事件作為回應。由於數據 ping 也包括客戶端和伺服器之間的網絡花費的時間,因此它大於或等於網絡 ping。
連接到伺服器的所有玩家的平均數據 ping 在開發者控制台的 伺服器統計 標籤中可見。單個客戶端的數據 ping 可以使用 ShiftF3 顯示網絡調試統計。
數據 ping 受網絡路徑和複製排隊延遲的影響。當伺服器生成的複製數據比網絡能夠發送的速度快(或比客戶端能夠處理的速度快)時,數據必須在複製隊列中等待。由於網絡重傳和 Roblox 應用程序處理網絡數據的方式,數據 ping 和網絡 ping 之間的某些差異是正常的。然而,如果數據 ping 顯著高於網絡 ping,請使用 MicroProfiler 查看網絡流量。要獲得優化建議,請參見 網絡和複製。