บ่อยครั้งที่การติดตั้งแอพพลิเคชั่นในสถานที่ของเราเดเบียนที่มีความเสถียรนั้นทำงานในเครื่องเสมือน - โดยทั่วไปใน VMware ESXi ในกรณีทั่วไปเราไม่สามารถมองเห็นหรือมีอิทธิพลเหนือสภาพแวดล้อมการจำลองเสมือนของพวกเขาและไม่สามารถเข้าถึงได้เช่นไคลเอนต์ VMware vCenter หรือเทียบเท่า ฉันมุ่งเน้น VMware ที่นี่เพราะโดยทั่วไปเป็นสิ่งที่เราเห็นมากที่สุด
เราต้องการ:
- บอกผู้ดูแลระบบ VMware ของลูกค้า: คุณสามารถเรียกใช้แอปพลิเคชันของเราเช่นสภาพแวดล้อม VMware ESX ของคุณตราบใดที่ตรงตามเกณฑ์ประสิทธิภาพ X, Y และ Z
- สามารถตรวจสอบได้ว่าเกณฑ์ X, Y และ Z เป็นจริงตามมาอย่างต่อเนื่อง (เช่นตอนนี้ ) แม้ในระบบที่กำลังรันอยู่ (เราไม่สามารถหยุดแอปพลิเคชันของเราและรันเกณฑ์มาตรฐานและมาตรฐานเริ่มต้นจะไม่เพียงพอ สภาพแวดล้อมเสมือนเปลี่ยนแปลงตลอดเวลา)
- มีความมั่นใจว่าหากตรงตามเกณฑ์ X, Y และ Z เราจะมีทรัพยากร HW เสมือนเพียงพอที่จะเรียกใช้แอปพลิเคชันของเราด้วยประสิทธิภาพที่น่าพอใจ
ตอนนี้ X, Y และ Z คืออะไร?
เราได้เห็นครั้งแล้วครั้งเล่าว่าเมื่อมีปัญหาด้านประสิทธิภาพปัญหาไม่ได้อยู่ที่แอปพลิเคชันของเรา แต่มีสภาพแวดล้อมการจำลองเสมือน เช่นเครื่องเสมือนอื่นใช้ CPU หน่วยความจำหรือ SAN ซึ่งดิสก์เก็บไว้จริง ๆ ใช้ประโยชน์อย่างหนักจากสิ่งอื่นนอกเหนือจากแอปพลิเคชันของเรา ขณะนี้เราไม่มีวิธีที่จะพิสูจน์หรือพิสูจน์หักล้าง
ในทางทฤษฎีอาจเป็นไปได้ว่าบางครั้งใบสมัครของเราช้า ... ;-)
วิธีการหนึ่งระบุสาเหตุของปัญหาประสิทธิภาพการทำงานของเรา: สภาพแวดล้อมเสมือนหรือใบสมัครของเรา?
โดยทั่วไปจะมี 3 พื้นที่สำหรับปัญหาเกี่ยวกับประสิทธิภาพของ CPU, หน่วยความจำและ DISK I / O
ซีพียู
ในเช่น VMware ผู้ดูแลระบบสามารถระบุการจองและการ จำกัด ซึ่งแสดงเป็น MHz แต่เป็นเช่น 512MHz บนโฮสต์ ESX หนึ่งโฮสต์ตรงกับ 512MHz บนโฮสต์ ESX อื่นอาจเป็นคลัสเตอร์ ESX ที่แตกต่างกันโดยสิ้นเชิง
และจะวัดได้อย่างไรว่าเราได้รับสิ่งนั้นจริงหรือ ขณะที่แอปพลิเคชันของเราทำงานอยู่เราอาจเห็นว่าเราใช้ประโยชน์จากซีพียู 212% ใน 4 ซีพียู นั่นเป็นเพราะแอปพลิเคชันของเรากำลังทำอะไรมากหรือเพราะ VM อื่นบนโฮสต์เดียวกันกำลังใช้งาน CPU มากและใช้ CPU ทั้งหมดหรือไม่
หน่วยความจำ (Ballooning?)
หากเราถามเช่น RAM 16GB ซึ่งมีการกำหนดค่าบ่อยครั้ง แต่เนื่องจากการส่งบอลลูนเราจะได้รับ 4GB เท่านั้นและแปลกใจแอปพลิเคชันของเราทำงานได้ไม่ดี
หนึ่งสามารถถามเครื่องมือ VMware เกี่ยวกับการบอลลูนในปัจจุบัน แต่เราพบว่ามันมักจะอยู่ (หรือไม่ถูกต้องอย่างน้อย) เราได้เห็นตัวอย่างแล้วว่าระบบปฏิบัติการคิดว่ามี RAM ทั้งหมด 16GB, ผลรวมของหน่วยความจำภายใน (RSS) ของกระบวนการทั้งหมดคือ 4GB RAM, แต่มี 2GB RAM ว่างเท่านั้น, แม้ว่าเครื่องมือของ VMware จะบอกเราว่ามีบอลลูน 0: - (
นอกจากนี้การเพิ่ม RSS ด้วยกันไม่ถูกต้องเนื่องจากอาจมี RAM ที่แชร์ได้ง่ายเช่นหน่วยความจำแบบคัดลอกเมื่อเขียนดังนั้น 512MB + 512MB จึงไม่จำเป็นต้องหมายถึง 1GB แต่อาจหมายถึงบางสิ่งที่น้อยลง ดังนั้นเราจึงไม่สามารถลบ RSS จากกระบวนการทั้งหมดเพื่อวัดขนาด RAM ที่ควรว่างและตรวจจับบอลลูนได้อย่างน่าเชื่อถือ เราสามารถตรวจจับบอลลูนบางกรณี แต่มีอีกหลายกรณีที่บอลลูนมีผล แต่ไม่สามารถตรวจจับได้ด้วยวิธีนี้
ดิสก์ I / O
ฉันเดาว่าเราสามารถสร้างกราฟในช่วงเวลาที่จำนวนดิสก์อ่านและเขียนจำนวนไบต์ที่อ่านและเขียนและ IO รอ% แต่นั่นจะให้ภาพที่ถูกต้องของดิสก์ I / O หรือไม่ ฉันคิดว่าถ้ามีคนขุดแร่ bitcoin ที่ทำงานอยู่ใน VM อื่นโดยใช้ CPU ทั้งหมด IO รอ% ของเราจะเพิ่มขึ้นแม้ว่า SAN พื้นฐานจะให้ประสิทธิภาพที่เหมือนกันเพียงเพราะทรัพยากร CPU ของเราลดลงและ IO ก็รอ ( ซึ่งวัดเป็น% ) เพิ่มขึ้น
ดังนั้นโดยสรุปเราสามารถใช้ภาษาใดในการอธิบายเช่นผู้ดูแลระบบ VMware ประสิทธิภาพที่เราต้องการในแบบพกพาและสามารถวัดได้
"It runs fine with x, y, and z"
ไม่แม่นยำพอ คุณต้องสามารถบอกลูกค้าของคุณได้อย่างแม่นยำถึงสิ่งที่แอปพลิเคชันของคุณต้องการ ถ้าพวกเขาให้คุณทรัพยากรเหล่านั้นและดำเนินการสมัครไม่ดีแล้วคำถามไม่ได้"What do we need from a resource perspective?"
แต่"Why is it performing poorly even though the proper resources have been allocated?"