เหตุใดเซิร์ฟเวอร์จึงไม่ทำงานสูงสุด


12

นี่เป็นคำถามที่รบกวนฉันมาระยะหนึ่งแล้วและฉันไม่สามารถหาอะไรทางออนไลน์ที่พูดถึงมันได้ ฉันมีเซิร์ฟเวอร์ที่ใช้ VMware Hypervisor ESXi เมื่อฉันบูทเครื่องเสมือนมันมักจะใช้เวลาบูตประมาณ 2-3 นาที ไม่นานมาก แต่ไม่ใช่ในทันที อย่างไรก็ตามเมื่อฉันดูบันทึกประสิทธิภาพการทำงานบนเซิร์ฟเวอร์การใช้งานตัวประมวลผล RAM หรือดิสก์ไม่ได้อยู่ที่ประมาณ 100% โดยปกติแล้วจะมีค่าเฉลี่ยประมาณ 60% -80% ดังนั้นหากเซิร์ฟเวอร์ใช้งานได้แล้วทำไมถึงไม่ทำ 100%

สำหรับผมแล้วดูเหมือนว่าในทุกช่วงเวลาองค์ประกอบที่ จำกัด ประสิทธิภาพควรทำงานที่ 100% ตัวอย่างเช่นถ้าฉันมีฮาร์ดไดรฟ์ช้าจริงๆมันควรจะทำงานที่ 100% เสมอ ดังนั้นอย่างน้อยหนึ่งในพื้นที่ (ตัวประมวลผล RAM ดิสก์และเครือข่าย) ควรอยู่ที่ 100% เสมอยกเว้นว่าเซิร์ฟเวอร์นั้นไม่มีการใช้งานทั้งหมด

ทำไมถึงไม่เป็นเช่นนั้น


การแจกแจง Linux ที่เก่ากว่าซึ่งไม่ขึ้นอยู่กับ systemd ไม่สามารถเริ่มต้นการทำงานแบบขนานได้อย่างมีประสิทธิภาพ * BSD ยังคงประสบกับปัญหานี้ บูตดิสทริบิวเตอร์ Linux รุ่นใหม่และดูว่ามันแตกต่างกันอย่างไร
Michael Hampton

คำตอบ:


18

ความหน่วงจะเป็นหนึ่งในเหตุผล ความล่าช้าระหว่าง "ดิสก์ให้ข้อมูลนี้กับฉันที่ฉันต้องการก่อนที่ฉันจะทำอะไรก็ได้" และเวลาที่ข้อมูลกลับมาจะทำให้ CPU ไม่ทำงานในขณะนั้น

ทรัพยากรอาจทำงานที่ 100% แต่สำหรับช่วงเวลาสั้น ๆ การบูตระบบปฏิบัติการจะเป็นไปตามรูปแบบทั่วไปของ "กระบวนการหรือตัดสินใจบางอย่างดึงบางสิ่งบางอย่างออกมาจากดิสก์ทำอะไรบางอย่างในหน่วยความจำทำอะไรกับอุปกรณ์" ซ้ำหลายครั้งต่อวินาที ดังนั้นเมื่อคุณเห็นดิสก์ที่ 25% ในระยะเวลา 2 วินาทีนั่นอาจหมายถึงว่ามันทำงานที่ 100% เป็นเวลา 0.5 วินาทีจากนั้นจึงปล่อยเวลาที่เหลือ

EEAA ชี้ให้เห็นว่าระบบหลายคอร์ทำให้สิ่งนี้ซับซ้อนยิ่งขึ้น ซอฟต์แวร์ที่เป็นเธรดเดี่ยวบน CPU ที่สามารถดำเนินการสี่เธรดสามารถเข้าถึงการทำงาน 25% ที่ความเร็วเต็มเท่านั้น แม้แต่ซอฟต์แวร์แบบมัลติเธรดที่สามารถเข้าถึงได้ 100% เนื่องจากข้อมูลต้องไหล (โดยปกติ) จากฮาร์ดไดรฟ์ไปยัง RAM ไปยังแคชไปยัง CPU การรักษาไปป์ไลน์นั้นเต็มเป็นเรื่องยากและมีแนวโน้มที่จะเกิดขึ้นส่วนใหญ่กับปริมาณงานที่คาดการณ์ได้เช่นการเข้ารหัสวิดีโอ ในกรณีนี้ระบบปฏิบัติการสามารถสังเกตรูปแบบการอ่านและดึงข้อมูลก่อนที่จะต้องใส่ลงในแคชที่เหมาะสมเช่นแคชดิสก์ใน RAM


16

คุณกำลังคิดเกี่ยวกับสิ่งนี้ในวิธีที่ง่ายมากซึ่งทำให้คุณตั้งสมมติฐานไม่ถูกต้องซึ่งฉันจะลองและล้างข้อมูล

อันดับแรกและอาจเกิดขึ้นได้ง่ายที่สุดบนระบบมัลติคอร์เพื่อให้เข้าใจถึงการใช้งาน CPU คุณต้องคำนึงถึงว่ากระบวนการโหลดนั้นมีหลายเธรดหรือไม่และออกแบบมาเพื่อใช้ประโยชน์จากหลายคอร์ หากไม่ใช่กรณีนี้ขึ้นอยู่กับการผสมผสานของกระบวนการทำงานคุณอาจไม่เคยเห็นการใช้งาน 100% เคย

ประการที่สองคุณต้องพิจารณาประสิทธิภาพของอุปกรณ์ IO ยกตัวอย่างเช่นระบบของคุณทราบได้อย่างไรว่าอุปกรณ์ของคุณสามารถใช้งาน IOPS ได้จำนวนเท่าใด มันไม่ได้ ตัวชี้วัดที่มีความหมายมากขึ้นสำหรับคุณในการรับชมคือiowaitค่าของคุณในระหว่างการบู๊ต (ซึ่งอาจยากที่จะหาได้ในระหว่างกระบวนการบู๊ต) หรือคิวของดิสก์ / เวลาแฝงในระหว่างการบู๊ต หากคุณเห็นคิวหรือเวลาแฝงขัดขวางอาจเป็นไปได้ว่าอุปกรณ์ IO ของคุณเป็นปัจจัยที่มีผลต่อปัญหาประสิทธิภาพการทำงานของคุณ


11

ฉันทำงานกับเซิร์ฟเวอร์มาแล้วประมาณ 20 ปีตอนนี้มักจะไม่ค่อยดีเมื่อส่วนประกอบทำงานที่ 100% ตลอดเวลา

ตัวอย่างเช่นสมมติว่าคุณมีฐานข้อมูล SQL ที่คุณไม่ต้องการสลับไปยังดิสก์ แต่ต้องการใช้หน่วยความจำหมด

หากฐานข้อมูลของคุณเป็น 24GB และระบบปฏิบัติการต้องการ 8GB คุณจะไม่ต้องการจัดสรร RAM ขนาด 32GB สำหรับเครื่องมี "สิ่ง" มากมายที่สามารถไปผิดรหัสที่ไม่ดี DDOS การใช้งานแอปพลิเคชันหนักใครจะรู้ ไม่มีห้องใหญ่คุณจะรู้ได้อย่างไรว่าเซิร์ฟเวอร์กำลังมีปัญหา

เรามีเซิร์ฟเวอร์ประมาณ 2,000 แห่งในศูนย์ข้อมูลของเราเราต้องการเห็นพวกมันทั้งหมดทำงานที่ CPU และ RAM ประมาณ 75% พื้นที่ hhd อยู่ใน SAN ของเราเพื่อที่จะเป็นลูกขี้ผึ้งที่แตกต่างอย่างสิ้นเชิง นอกจากนี้เรายังมีการแจ้งเตือนเพื่อแจ้งให้เราทราบเมื่อพวกเขามี CPU หรือ RAM 85% และการแจ้งเตือนจะแจ้งให้เราทราบเมื่อพวกเขาถึง 90%


ฉันคิดว่าคุณออกนอกลู่นอกทางเล็กน้อยที่นี่ ฉันบอกว่าฉันใช้เครื่องเสมือนดังนั้นจึงมีภาระที่สอดคล้องกันซึ่งแตกต่างจากเซิร์ฟเวอร์ฐานข้อมูลมากซึ่งจะทำงานเมื่อได้รับการร้องขอและจัดสรรทรัพยากร ฉันกังวลเกี่ยวกับปัจจัย จำกัด ประสิทธิภาพไม่ว่าจะจัดสรรทรัพยากรเหล่านั้นอย่างไร แต่ขอบคุณสำหรับคำตอบ!
เคอร์เนลสเติร์นส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.