การระบุปัญหาด้านประสิทธิภาพโดยทั่วไปหมายถึงการเจาะลึกลงไปในหนึ่งในสามหมวดหมู่: อัตราเฟรม (การคำนวณ), หน่วยความจำ หรือเวลาติดตั้ง
Roblox มีเครื่องมือมากมายในการระบุปัญหาด้านประสิทธิภาพ ซึ่งบางอย่างมีอยู่ในไคลเอนต์ของ Roblox (และดังนั้นจึงรวมถึง Studio) และบางอย่างมีอยู่เฉพาะใน Studio ในขณะที่คุณสามารถสังเกตพฤติกรรมของไคลเอนต์ได้โดยตรง คุณต้องใช้เครื่องมือเพื่อวินิจฉัยปัญหาที่เกิดขึ้นกับเซิร์ฟเวอร์
เครื่องมือวินิจฉัย
| เครื่องมือ | คำอธิบาย | ตำแหน่ง | ทางลัดคีย์บอร์ด | สภาพแวดล้อม |
|---|---|---|---|---|
| Developer Console | คอนโซลที่มีข้อความบันทึกจริง, ข้อผิดพลาด และข้อมูลรายละเอียดเกี่ยวกับหน่วยความจำ, การเชื่อมต่อเครือข่าย, และประสิทธิภาพของสคริปต์ มีประโยชน์ในการดูการใช้หน่วยความจำ สถิติสุขภาพสำคัญของเซิร์ฟเวอร์ สถิติประสิทธิภาพของสคริปต์ และเพื่อเปิด MicroProfiler ของไคลเอนต์หรือเซิร์ฟเวอร์ | Studio ในเกม | F9 | การทดสอบใน Studio เซสชันสด |
| MicroProfiler | เครื่องมือการดีบักที่แยกย่อยการใช้เวลาในการคำนวณที่ใช้ในงานแต่ละเฟรม มันสามารถสร้างข้อมูลสำหรับการวิเคราะห์ที่แสดงการแยกย่อยที่แม่นยำของเฟรมแต่ละเฟรม ทำให้มีประโยชน์ในการระบุงานเฉพาะที่ทำให้เกิดปัญหาด้านประสิทธิภาพ คุณสามารถเรียกใช้งานโปรไฟเลอร์ได้ทั้งในไคลเอ็นต์หรือเซิร์ฟเวอร์ ขึ้นอยู่กับว่าข้างใดมีปัญหา | Studio ในเกม | CtrlAltF6 (⌘⌥F6) | การทดสอบใน Studio เซสชันสด |
| การวิเคราะห์ฉาก | ให้ข้อมูลการเปรียบเทียบในทันทีเกี่ยวกับทรัพยากรที่ไคลเอนต์และเซิร์ฟเวอร์ของคุณใช้งานและอินสแตนซ์ใดที่รับผิดชอบต่อการใช้ทรัพยากรนั้น | Studio | N/A | การทดสอบใน Studio |
| สถิติประสิทธิภาพ | แถบเครื่องมือที่มีสถิติเบื้องต้นเกี่ยวกับประสิทธิภาพ รวมถึงการใช้หน่วยความจำ CPU, GPU, ข้อมูลเครือข่ายที่ส่งและรับ และเวลา ping | ในเกม | 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 สำหรับทุกเกม ดังนั้นค่าที่ต่ำกว่าจึงอาจบ่งบอกถึงปัญหาด้านประสิทธิภาพ เพื่อเช็คการเต้นของหัวใจเซิร์ฟเวอร์:
ด้วย Developer Console - ในแท็บ Server Jobs ให้ขยายแถว Heartbeat และตรวจสอบค่าที่ Steps Per Sec ซึ่งแสดงถึงการเต้นของหัวใจของเกมของคุณ
ด้วย MicroProfiler คุณสามารถตรวจสอบกราฟเพื่อดูว่าเฟรมใช้เวลานานกว่า 16.67 มิลลิวินาทีหรือไม่
อีกสัญญาณหนึ่งของการลดลงของการเต้นของหัวใจเซิร์ฟเวอร์คือความล่าช้าที่เพิ่มขึ้น (ที่รู้จักกันทั่วไปว่าเป็น ping) ยิ่งเซิร์ฟเวอร์ใช้เวลานานขึ้นในการเสร็จสิ้นการคำนวณงานในแต่ละเฟรม นานขึ้นเท่าไรในการประมวลผลข้อมูลเครือข่ายที่ส่งและรับจากไคลเอนต์ เพื่อเช็คค่า ping เฉลี่ยสำหรับผู้เล่นทั้งหมดที่เชื่อมต่อกับเซิร์ฟเวอร์ ให้ไปที่แท็บ Server Stats ใน Developer Console
การคำนวณไคลเอ็นต์
อัตราเฟรมของไคลเอนต์เริ่มต้นถูกจำกัดที่ 60 FPS อย่างไรก็ตาม ผู้ใช้สามารถเพิ่มอัตราเฟรมให้สูงสุดถึง 240 FPS บน Windows
อัตราเฟรมแตกต่างกันมากระหว่างอุปกรณ์ ตัวอย่างเช่น PC ระดับไฮเอนด์อาจสามารถ "บังคับ" ปัญหาทางคอมพิวเตอร์และมีเพียงอัตราเฟรมที่ลดลงที่ไม่สามารถรับรู้ได้ หากคุณ ทดสอบบนอุปกรณ์ที่ระดับต่ำกว่า ปัญหามักจะรุนแรงกว่าและสังเกตเห็นได้ง่ายขึ้น
เพื่อเช็คอัตราเฟรมของเกมของคุณ:
ในไคลเอนต์ กด ShiftF5 เพื่อแสดงสรุปสถิติการดีบัก
จากเมนู Window ⟩ Performance ของ Studio ให้เปิด Stats เพื่อเปิดใช้งานสถิติการดีบัก
ด้วย MicroProfiler คุณสามารถตรวจสอบกราฟเพื่อดูว่าเฟรมใช้เวลานานกว่า 16.67 มิลลิวินาทีหรือไม่
หน่วยความจำเซิร์ฟเวอร์
พยายามเก็บการใช้หน่วยความจำของเซิร์ฟเวอร์ไว้ต่ำกว่า 50% การใช้หน่วยความจำทั้งหมดของเซิร์ฟเวอร์ใช้สูตรดังต่อไปนี้:
6.25 GiB + (100 MiB * จำนวนผู้เล่นที่เชื่อมต่อมากที่สุด)
ตัวอย่างเช่น เซิร์ฟเวอร์ที่มีผู้เล่นเชื่อมต่อ 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 - หน่วยความจำที่ใช้โดยไฟล์เสียง
เวลาโหลด
ไม่มีเครื่องมือในตัวสำหรับการเช็คเวลาโหลด แต่เนื่องจากเวลาโหลดไม่ต้องการความแม่นยำในระดับมิลลิวินาที นาฬิกาจับเวลามักจะเป็นสิ่งที่คุณต้องการเพื่อทำความเข้าใจเกณฑ์มาตรฐานปัจจุบันของคุณ และตรวจสอบว่าคุณได้ทำการปรับปรุงที่สำคัญหรือไม่ คุณสามารถใช้สคริปต์ไคลเอนต์ใน 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)
เพื่อรับข้อมูลเชิงลึกเพิ่มเติม เปิดใช้งาน Print Join Size Breakdown จากแท็บ Network ของ Studio Settings เพื่อพิมพ์ 20 อินสแตนซ์ชั้นนำตามขนาดและการแบ่งส่วนเปอร์เซ็นต์ตามประเภทของอินสแตนซ์เมื่อคุณเริ่มเกมใน Studio
Ping
การวัด ping (ความล่าช้า) หลักสองประการคือ network ping และ data ping
Network ping คือเวลาการเดินทางไปกลับที่วัดจากเวลาที่ไคลเอนต์ส่งแพ็คเกจข้อมูลเครือข่ายไปจนถึงเวลาที่มันได้รับการตอบกลับของเซิร์ฟเวอร์ มันมีลักษณะคล้ายกับสิ่งที่รายงานเป็น time โดยเครื่องมือ ping เครือข่ายแบบทั่วไป
Network ping สามารถมองเห็นได้ในแถบ Performance Stats โดยมักจะได้รับผลกระทบจากความยาวของเส้นทางเครือข่ายระหว่างไคลเอนต์และเซิร์ฟเวอร์ และอยู่นอกเหนือการควบคุมของคุณ อย่างไรก็ตามคุณสามารถจำลอง ping และเงื่อนไขเครือข่ายอื่น ๆ โดยใช้ การจำลองเครือข่าย เมื่อทดสอบเกมใน 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 เพื่อดูการรับส่งข้อมูลเครือข่าย สำหรับข้อเสนอแนะแนวทางในการปรับแต่งให้ดูที่ การเชื่อมต่อเครือข่ายและการทำซ้ำ