การระบุปัญหาด้านประสิทธิภาพโดยทั่วไปหมายถึงการเจาะลึกลงไปในหนึ่งในสามหมวดหมู่: อัตราเฟรม (การคำนวณ), หน่วยความจำ หรือเวลาโหลด
Roblox มีเครื่องมือหลายอย่างสำหรับการระบุปัญหาด้านประสิทธิภาพ ซึ่งบางอย่างสามารถใช้ได้ในไคลเอนต์ Roblox (และดังนั้นจึงสามารถใช้ใน Studio) และบางอย่างสามารถใช้ได้เฉพาะใน Studio เท่านั้น ในขณะที่คุณสามารถสังเกตพฤติกรรมของไคลเอนต์ได้โดยตรง คุณต้องใช้เครื่องมือในการวินิจฉัยปัญหาที่เกิดขึ้นกับเซิร์ฟเวอร์
เครื่องมือวินิจฉัย
| เครื่องมือ | คำอธิบาย | ตำแหน่ง | ทางลัดคีย์บอร์ด | สภาพแวดล้อม |
|---|---|---|---|---|
| Developer Console | คอนโซลที่มีข้อความบันทึกแบบเรียลไทม์ ข้อผิดพลาด และข้อมูลรายละเอียดเกี่ยวกับหน่วยความจำ เครือข่าย และประสิทธิภาพของสคริปต์ มีประโยชน์สำหรับการดูการใช้หน่วยความจำ สถิติสุขภาพของเซิร์ฟเวอร์หลัก สถิติประสิทธิภาพของสคริปต์ และเพื่อเปิด MicroProfiler ของไคลเอนต์หรือเซิร์ฟเวอร์ | Studio In-Game | F9 | Studio Testing Live Sessions |
| MicroProfiler | เครื่องมือการดีบักที่แยกแยะว่าใช้เวลาในการคำนวณมากแค่ไหนในแต่ละเฟรม มันสามารถสร้างข้อมูลสำหรับการวิเคราะห์ที่แสดงการแยกแยะที่แม่นยำของเฟรมแต่ละเฟรม ทำให้มีประโยชน์ในการระบุงานเฉพาะที่ทำให้เกิดปัญหาด้านประสิทธิภาพ คุณสามารถเรียกใช้โปรไฟเลอร์ได้ทั้งในไคลเอนต์หรือเซิร์ฟเวอร์ ขึ้นอยู่กับว่าฝั่งไหนมีปัญหา | Studio In-Game | CtrlAltF6 (⌘⌥F6) | Studio Testing Live Sessions |
| Scene Analysis | ให้ข้อมูลเปรียบเทียบในมุมมองเกี่ยวกับทรัพยากรที่ฉากของไคลเอนต์และเซิร์ฟเวอร์ของคุณกำลังใช้และตัวอย่างใดที่รับผิดชอบต่อการใช้ทรัพยากรนั้น | Studio | N/A | Studio Testing |
| Performance Stats | แถบเครื่องมือที่มีสถิติประสิทธิภาพพื้นฐาน รวมถึงการใช้หน่วยความจำ CPU GPU ข้อมูลเครือข่ายที่ส่งและรับ และเวลา ping | In-Game | CtrlAltF7 (⌘⌥F7) | Studio Testing Live Sessions |
| Debug Stats | แสดงข้อมูลรายละเอียดเกี่ยวกับกราฟิก ฟิสิกส์ การจราจรเครือข่าย และ FPS | Studio In-Game | ShiftCtrlF1 (Shift⌘F1), ShiftCtrlF2 (Shift⌘F2), ShiftCtrlF3 (Shift⌘F3), ShiftCtrlF4 (Shift⌘F4), ShiftCtrlF5 (Shift⌘F5) | Studio Testing Live Sessions |
| Network Simulation | คุณสมบัติที่จำลองเงื่อนไขเครือข่ายในโลกแห่งความจริง เช่น ความล่าช้า การกระเพื่อม และการสูญหายของแพ็กเกจ เพื่อทดสอบการเชื่อมต่อ | Studio | AltS(⌥S) | Studio Testing |
| Performance Dashboard | แดชบอร์ดที่มีกราฟรวมสำหรับการใช้หน่วยความจำของไคลเอนต์และเซิร์ฟเวอร์ อัตราเฟรมของไคลเอนต์ การเต้นของหัวใจของเซิร์ฟเวอร์ และอัตราการชนในเวลาจริง มีประโยชน์สำหรับการวิเคราะห์รูปแบบประสิทธิภาพเมื่อเวลาผ่านไป ดู การตรวจสอบประสิทธิภาพ | Creator Dashboard | N/A | Live Sessions |
การคำนวณเซิร์ฟเวอร์
การเต้นของหัวใจของเซิร์ฟเวอร์ถูกจำกัดที่ 60 FPS สำหรับเกมทั้งหมด ดังนั้นค่าที่ต่ำกว่านั้นอาจบ่งบอกถึงปัญหาด้านประสิทธิภาพ เพื่อตรวจสอบการเต้นของหัวใจของเซิร์ฟเวอร์:
ด้วย Developer Console - ในแท็บ Server Jobs ขยายแถว Heartbeat และตรวจสอบค่าที่ Steps Per Sec ซึ่งแสดงถึงการเต้นของหัวใจของเกมของคุณ
ด้วย MicroProfiler คุณสามารถตรวจสอบกราฟเพื่อดูว่าเฟรมใช้เวลานานกว่า 16.67 ms หรือไม่
อีกหนึ่งอาการของการลดลงของการเต้นของหัวใจของเซิร์ฟเวอร์คือความล่าช้าที่เพิ่มขึ้น (ที่รู้จักกันทั่วไปว่าเป็น ping) ยิ่งเซิร์ฟเวอร์ใช้เวลานานในการเสร็จสิ้นการคำนวณงานในแต่ละเฟรมมากเท่าไหร่ ก็ยิ่งใช้เวลานานในการประมวลผลข้อมูลเครือข่ายที่ส่งและรับจากไคลเอนต์มากขึ้นเท่านั้น เพื่อตรวจสอบค่า ping เฉลี่ยสำหรับผู้เล่นทั้งหมดที่เชื่อมต่อกับเซิร์ฟเวอร์ ให้ไปที่แท็บ Server Stats ใน Developer Console
หากการเต้นของหัวใจของเซิร์ฟเวอร์ยังคงต่ำหลังจากที่คุณ ปรับปรุงประสิทธิภาพ เกมของคุณอาจต้องการ CPU มากกว่าที่เซิร์ฟเวอร์จะได้รับตามค่าเริ่มต้น คุณสามารถจองมากขึ้นได้ด้วย Extended Services for Compute
การคำนวณไคลเอนต์
การจำกัดอัตราเฟรมของไคลเอนต์เริ่มต้นอยู่ที่ 60 FPS อย่างไรก็ตาม ผู้ใช้สามารถเพิ่มขีดจำกัดอัตราเฟรมของตนได้สูงสุดถึง 240 FPS บน Windows
อัตราเฟรมจะแตกต่างกันอย่างมากระหว่างอุปกรณ์ ตัวอย่างเช่น PC ระดับสูงอาจสามารถ "บังคับ" ปัญหาการคำนวณและประสบกับการลดอัตราเฟรมที่ไม่สามารถรับรู้ได้ หากคุณ ทดสอบบนอุปกรณ์ระดับต่ำกว่า ปัญหามักจะรุนแรงกว่าจึงสังเกตเห็นได้ง่ายกว่า
เพื่อตรวจสอบอัตราเฟรมของเกมของคุณ:
ในไคลเอนต์ กด ShiftF5 เพื่อแสดงสรุปสถิติการดีบัก
จากเมนู Window ⟩ Performance ของ Studio เปิดใช้งาน Stats เพื่อเปิดใช้งานสถิติการดีบัก
ด้วย MicroProfiler คุณสามารถตรวจสอบกราฟเพื่อดูว่าเฟรมใช้เวลานานกว่า 16.67 ms หรือไม่
หน่วยความจำเซิร์ฟเวอร์
พยายามรักษาการใช้หน่วยความจำของเซิร์ฟเวอร์ให้ต่ำกว่า 50% การใช้หน่วยความจำทั้งหมดของเซิร์ฟเวอร์ใช้สูตรต่อไปนี้:
6.25 GiB + (100 MiB * largest_number_of_connected_players)
ตัวอย่างเช่น เซิร์ฟเวอร์ที่มีผู้เล่นเชื่อมต่อ 30 คนมีหน่วยความจำทั้งหมดประมาณ 9.18 GiB เซิร์ฟเวอร์จะได้รับหน่วยความจำเมื่อผู้เล่นเชื่อมต่อ แต่ ไม่ สูญเสียเมื่อผู้เล่นตัดการเชื่อมต่อ หากผู้เล่น 10 คนออก เซิร์ฟเวอร์ยังคงมีหน่วยความจำ 9.18 GiB แทนที่จะลดลงเหลือ 8.2 GiB
เมื่อเซิร์ฟเวอร์ปิด (เช่น เมื่อว่างเปล่าหรือเป็นส่วนหนึ่งของ กระบวนการอัปเดต) การแทนที่ของพวกเขาจะเริ่มต้นด้วยจำนวนหน่วยความจำพื้นฐานและเริ่มขยายขึ้นเมื่อผู้เล่นเชื่อมต่อ
หน่วยความจำไคลเอนต์
มีหลายวิธีในการตรวจสอบการใช้หน่วยความจำสำหรับเกม:
- เปิด Developer Console และสลับไปที่แท็บ Memory แท็บนี้ให้การแยกแยะว่าใช้หน่วยความจำอย่างไร ใช้ไคลเอนต์แทน Studio เพื่อให้ได้การอ่านค่าที่แม่นยำที่สุด
- เปิดใช้งานมุมมอง Performance Stats จากเมนูการตั้งค่าในไคลเอนต์เพื่อดูการซ้อนทับที่มีการใช้หน่วยความจำทั้งหมดของไคลเอนต์
การใช้หน่วยความจำสูงไม่จำเป็นต้องบ่งบอกถึงปัญหา แต่มีบางสัญญาณที่คุณอาจต้องตรวจสอบเพิ่มเติม ได้แก่:
- เปอร์เซ็นต์ที่สำคัญของการชนของไคลเอนต์ที่แสดงใน Performance Dashboard โดยเฉพาะอย่างยิ่งการเพิ่มขึ้นอย่างกะทันหันที่ตรงกับการอัปเดต จำนวนการชนบางอย่างเป็นสิ่งที่คาดหวัง แต่คุณควรตรวจสอบหากอัตราการชนของคุณเพิ่มขึ้นเกิน 2-3%
- เกิดการชนขึ้นในขณะที่ทดสอบบนอุปกรณ์ที่คุณต้องการให้เกมของคุณรองรับ
ส่วนสำคัญของการใช้หน่วยความจำของเกมในไคลเอนต์มาจากทรัพย์สิน เช่น รูปภาพ เมช และไฟล์เสียง ที่โหลดเข้าสู่หน่วยความจำ ใน Developer Console ให้ตรวจสอบป้ายกำกับต่อไปนี้ภายใต้ PlaceMemory:
- GraphicsMeshParts - หน่วยความจำกราฟิกที่ใช้โดยเมช
- GraphicsTexture - หน่วยความจำกราฟิกที่ใช้โดยพื้นผิว
- Sounds - หน่วยความจำที่ใช้โดยไฟล์เสียง
เวลาโหลด
เวลาโหลด ซึ่งเรียกว่าเวลาเข้าร่วม คือเวลาทั้งหมดตั้งแต่เมื่อผู้เล่นคลิก Play จนถึงเมื่อโลกเรนเดอร์และพวกเขาสามารถเริ่มเล่นได้ หลังจากที่ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์ การเข้าร่วมจะเกิดขึ้นตามลำดับต่อไปนี้:
- ReplicatedFirst จะทำการจำลองไปยังไคลเอนต์ และหน้าจอ โหลดที่กำหนดเอง ใด ๆ ที่อยู่ภายในจะปรากฏขึ้น
- ข้อมูลโมเดลที่เหลือจะถูกจำลอง รวมถึงทุกอย่างใน ReplicatedStorage และ Workspace หากคุณเปิดใช้งาน การสตรีมอินสแตนซ์ จะมีเพียงพื้นที่ของ Workspace ใกล้จุดเกิดของผู้เล่นที่จำลองในขั้นตอนนี้
- อวตารของผู้เล่นจะโหลด เวลาโหลดจะสิ้นสุดเมื่อหน้าจอโหลดหายไปและโลกเริ่มเรนเดอร์
การรู้ว่าขั้นตอนใดช้า จะช่วยให้คุณเลือกการปรับแต่งที่มีผลกระทบมากที่สุด สำหรับสาเหตุและการแก้ไขทั่วไป ดูที่ ปรับปรุงประสิทธิภาพ
ไม่มีเครื่องมือในตัวสำหรับการตรวจสอบเวลาโหลด แต่เนื่องจากไม่ต้องการความแม่นยำในระดับมิลลิวินาที นาฬิกาจับเวลามักจะเป็นสิ่งที่คุณต้องการเพื่อทำความเข้าใจพื้นฐานปัจจุบันของคุณและตรวจสอบว่าคุณได้ทำการปรับปรุงที่สำคัญหรือไม่ คุณสามารถใช้สคริปต์ไคลเอนต์ใน 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)เพื่อให้ได้ข้อมูลเชิงลึกเพิ่มเติม เปิดใช้งาน Print Join Size Breakdown จากแท็บ Network ของ Studio Settings เพื่อพิมพ์ 20 อินสแตนซ์ที่ใหญ่ที่สุดตามขนาดและการแบ่งเปอร์เซ็นต์ตามประเภทของอินสแตนซ์เมื่อคุณเริ่มเกมใน Studio
หากเวลาโหลดของคุณสูงเกินไปเมื่อเปรียบเทียบกับขนาดที่ชัดเจนของเกมของคุณ ให้ตรวจสอบสถานที่ของคุณสำหรับสคริปต์ที่ไม่รู้จักหรือถูกปิดบัง โมเดลฟรีบางตัวจาก Creator Store มีสคริปต์ที่สร้างอินสแตนซ์เพิ่มเติมหลายพันตัว ซึ่งเพิ่มปริมาณข้อมูลที่ต้องจำลองเมื่อผู้เล่นเข้าร่วมอย่างมาก
วัดเวลาโหลดก่อนและหลังการปรับแต่งหรืออัปเดตแต่ละครั้งเพื่อให้คุณสามารถยืนยันผลกระทบและจับการถดถอย การเพิ่มขึ้นอย่างกะทันหันมักหมายความว่ามีเนื้อหาถูกเพิ่มลงใน ReplicatedStorage หรือการเปลี่ยนแปลงทรัพย์สินทำให้ขนาดการดาวน์โหลดเพิ่มขึ้น
Ping
การวัด ping (ความล่าช้า) สองประเภทหลักคือ network ping และ data ping
Network ping คือเวลาที่ใช้ในการเดินทางไปกลับที่วัดจากเมื่อไคลเอนต์ส่งแพ็กเกจข้อมูลเครือข่ายไปจนถึงเมื่อมันได้รับการตอบกลับจากเซิร์ฟเวอร์ มันคล้ายกับสิ่งที่รายงานว่าเป็น time โดยยูทิลิตี้เครือข่าย ping ทั่วไป
Network ping สามารถมองเห็นได้ในแถบ Performance Stats มันส่วนใหญ่ได้รับผลกระทบจากความยาวของเส้นทางเครือข่ายระหว่างไคลเอนต์และเซิร์ฟเวอร์ และอยู่นอกการควบคุมของคุณ อย่างไรก็ตาม คุณสามารถจำลอง ping และเงื่อนไขเครือข่ายอื่น ๆ โดยใช้ network simulation เมื่อทดสอบใน Studio
Data ping คือเวลาที่ใช้ในการเดินทางไปกลับที่วัดจากเมื่อไคลเอนต์ส่งข้อมูลอย่างเชื่อถือได้ผ่านระบบการจำลองไปจนถึงเมื่อมันได้รับการตอบกลับจากระบบการจำลองของเซิร์ฟเวอร์ มันรวมถึงเวลาที่ใช้ในคิวการจำลองของไคลเอนต์และเซิร์ฟเวอร์ รวมถึงการส่งข้อมูล TCP-like ใหม่สำหรับแพ็กเกจที่สูญหายหรือเสียหาย
Data ping คล้ายกับการส่งเหตุการณ์ระยะไกลที่เชื่อถือได้จากไคลเอนต์ รับมันบนเซิร์ฟเวอร์ และจากนั้นส่งเหตุการณ์ระยะไกลที่เชื่อถือได้จากเซิร์ฟเวอร์ไปยังไคลเอนต์เป็นการตอบสนอง เนื่องจาก data ping ยังรวมถึงเวลาที่ใช้ในเครือข่ายระหว่างไคลเอนต์และเซิร์ฟเวอร์ มันจึงมากกว่าหรือเท่ากับ network ping
ค่า data ping เฉลี่ยสำหรับผู้เล่นทั้งหมดที่เชื่อมต่อกับเซิร์ฟเวอร์สามารถมองเห็นได้ในแท็บ Server Stats ของ Developer Console ค่า data ping สำหรับไคลเอนต์แต่ละตัวสามารถมองเห็นได้โดยใช้ ShiftF3 เพื่อแสดงสถิติการดีบักเครือข่าย
Data ping ได้รับผลกระทบจากทั้งเส้นทางเครือข่ายและความล่าช้าในการจัดคิวการจำลอง เมื่อเซิร์ฟเวอร์สร้างข้อมูลการจำลองได้เร็วกว่าที่เครือข่ายจะส่งมัน (หรือเร็วกว่าที่ไคลเอนต์จะประมวลผลมัน) ข้อมูลจะต้องรอในคิวการจำลอง ความแตกต่างบางประการระหว่าง data ping และ network ping เป็นเรื่องปกติเนื่องจากการส่งข้อมูลใหม่ในเครือข่ายและวิธีการประมวลผลข้อมูลเครือข่ายโดยแอป Roblox อย่างไรก็ตาม หาก data ping สูงกว่ามากกว่า network ping ให้ใช้ MicroProfiler เพื่อตรวจสอบการจราจรเครือข่าย สำหรับข้อเสนอแนะแนวทางการปรับแต่ง ดูที่ networking and replication