識別性能問題通常意味着深入研究三個類別中的一個:幀率(計算)、內存或加載時間。
Roblox 擁有多個識別性能問題的工具,其中一些在 Roblox 客戶端(因此在 Studio 中)可用,另一些則僅在 Studio 中可用。雖然您可以直接觀察客戶端行為,但必須使用工具來診斷伺服器問題。
診斷工具
| 工具 | 描述 | 位置 | 鍵盤快捷鍵 | 環境 |
|---|---|---|---|---|
| 開發者控制台 | 一個實時日誌消息、錯誤和有關內存、網絡和腳本性能的詳細信息的控制台。它非常適合查看內存消耗、關鍵伺服器健康統計數據、腳本性能統計數據,並啟動客戶端或伺服器微性能分析儀。 | Studio 遊戲內 | F9 | Studio 測試 現場會話 |
| 微性能分析儀 | 一個調試工具,可以分解每幀上花費的計算時間。它可以生成分析轉儲,顯示單獨幀的精確細分,對識別造成性能問題的特定任務非常有幫助。您可以在客戶端或伺服器上運行性能分析儀,取決於哪一側存在問題。 | 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,因此較低的值可能表明存在性能問題。要檢查伺服器心跳:
伺服器心跳降級的另一個症狀是延遲增加(通常稱為 ping)。伺服器每幀完成計算任務所需的時間越長,處理從客戶端發送和接收的網絡數據的時間也會越長。要檢查連接到伺服器的所有玩家的平均 ping,請轉到 開發者控制台 的 伺服器統計 標籤。
客戶端計算
客戶端的預設幀率限制為 60 FPS。然而,使用者可以在 Windows 系統上將其幀率限制提高到 240 FPS。
幀率在不同設備之間差異很大。例如,一台高端 PC 可能能夠用“暴力”方法解決計算問題,僅會經歷難以察覺的幀率下降。如果您 在低端設備上測試,問題往往更為嚴重,因此更易於發現。
要檢查您的遊戲幀率:
在客戶端中,按 ShiftF5 顯示調試統計摘要。
在 Studio 的 視窗 ⟩ 性能 菜單中,切換 統計 以啟用調試統計。
使用 微性能分析儀,您可以檢查圖表以查看幀是否耗時超過 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 中使用客戶端腳本來了解您的變更如何影響加載時間,但此腳本並不提供完整的端到端測量:
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 個實例和按實例類型的百分比細分。
Ping
Ping(延遲)的兩個主要測量指標是 網絡 ping 和 數據 ping。
網絡 ping 是從客戶端發送網絡數據包到接收伺服器的回音回复的來回時間。這類似於通用 ping 網絡實用程序報告的 time。
網絡 ping 在 性能統計 欄中可見。它主要受客戶端和伺服器之間的網絡路徑長度影響,這超出您的控制。但是,您可以在 Studio 中進行遊戲測試時使用 網絡模擬 來模擬 ping 和其他網絡條件。
數據 ping 是從客戶端可靠地通過複製系統發送數據到接收伺服器的回音回复的來回時間。它包括在客戶端和伺服器的複製隊列中所花費的時間,以及失去或損壞數據包的 TCP 類似重發。
數據 ping 類似於從客戶端發送可靠的遠程事件,在伺服器上接收該事件,然後從伺服器發送可靠的遠程事件到客戶端作為回應。由於數據 ping 也包括客戶端和伺服器之間的網絡花費的時間,因此它大於或等於網絡 ping。
所有連接到伺服器的玩家的平均數據 ping 可以在開發者控制台的 伺服器統計 標籤中看到。對於單個客戶端的數據 ping 可以使用 ShiftF3 來顯示網絡調試統計。
數據 ping 受網絡路徑和複製隊列延遲的影響。當伺服器生成的複製數據比網絡能發送的速度快(或者比客戶端能處理的速度快)時,數據必須等待在複製隊列中。由於網絡重傳和 Roblox 應用處理網絡數據的方式,數據 ping 和網絡 ping 之間存在一些正常的差異。然而,如果數據 ping 顯著高於網絡 ping,則使用 微性能分析儀 查看網絡流量。欲獲得優化建議,請參見 網絡和複製。