คุณประเมินจำนวนหน่วยความจำที่จะซื้ออย่างไร


10

ฉันมีแอปพลิเคชันเซิร์ฟเวอร์แบบกำหนดเองที่ทำงานบน Windows 2008 R2 มันเป็นบริการ Windows ที่ปลูกในบ้านซึ่งเขียนด้วย. Net รองรับเทอร์มินัลที่กำหนดเองจำนวนมาก ฉันมีเครื่องทดสอบที่มีสเปคที่คล้ายคลึงกับเซิร์ฟเวอร์จริงและฉันมีชุดเครื่องจำลองไคลเอนต์ที่ฉันสามารถใช้เพื่อสร้างโหลดที่เป็นการประมาณที่สมเหตุสมผลของระบบจริง ฉันต้องสามารถรองรับได้ถึง 12,000 ตัวและในปัจจุบันเซิร์ฟเวอร์มีหน่วยความจำไม่เพียงพอ (Paging กำลังผ่านหลังคา)

แผนของฉันคือการเริ่มต้น 100 ตัวจำลอง, วัดการใช้หน่วยความจำ, จากนั้นเริ่มหน่วยความจำอีก 100 หน่วยอีกครั้งและทำซ้ำจนกว่าเพจจิ้งจะเริ่มขึ้น (ในความเป็นจริงฉันจะจดจุดข้อมูลมากกว่าสามจุด) จำนวนหน่วยความจำเพิ่มเติมที่จำเป็นสำหรับ 100 ตัวจำลองและช่วยให้ฉันสามารถคาดการณ์จำนวนหน่วยความจำที่ต้องการ ฉันต้องการเพียงความคิดคร่าวๆ +/- 30Gb เพื่อหลีกเลี่ยงการซื้อ 2Tb เต็มรูปแบบ (มูลค่า $ 150,000) ที่เซิร์ฟเวอร์จะใช้ คำถามของฉันคือว่านี่เป็นวิธีการที่เหมาะสมที่จะใช้หรือไม่และหากเป็นเช่นนั้นคุณควรตรวจสอบ Performance Counters ใดเพื่อให้ปริมาณหน่วยความจำที่ใช้จริงหรือไม่

ฉันกำลังพูดถึงหน่วยความจำโดยเฉพาะที่นี่เป็นความแตกต่างระหว่าง Working Set, Private Bytes, Committed, Virtual และเงื่อนไขหน่วยความจำอื่น ๆ ทั้งหมดทำให้ฉันสับสน ฉันคิดว่าฉันสามารถจัดการตรวจสอบ CPU, IO และระบบเครือข่ายได้ด้วยตัวเอง อีกสิ่งหนึ่งที่ฉันสังเกตเห็นคือ. Net Cache ปรับการใช้หน่วยความจำขึ้นอยู่กับสิ่งที่มีอยู่ซึ่งทำให้มองเห็นแนวโน้มยาก


ฉันจะจริงๆระมัดระวังในการใช้หน่วยความจำที่โผล่ขึ้นอยู่กับ 2 จุดข้อมูลเพื่อให้ใกล้เคียงกัน ฉันจะสงสัยอย่างมากว่าการใช้หน่วยความจำ (และ I / O สำหรับเรื่องนั้น) จะเพิ่มขึ้นเป็นเส้นตรง มันอาจ แต่ฉันสงสัยว่ามันจะมีแนวโน้มไปทางที่ไม่ใช่เชิงเส้นในขณะที่คุณย้ายไปเป็นจำนวนมาก ฉันจะทดสอบด้วยจุดข้อมูลจำนวนหนึ่งความคืบหน้าตั้งแต่ขนาดเล็กไปจนถึงขนาดใหญ่จนกระทั่งประสิทธิภาพกลายเป็นปัญหา (เพจจิ้งความอิ่มตัวของ I / O ฯลฯ ) และโครงการจากที่นั่น หากเป็นไปได้ที่จะอัพเกรดเครื่องเพิ่มเติมและทำการจำลองหมายเลขลูกค้าที่ใหญ่ขึ้นเรื่อย ๆ ฉันจะทำเช่นนั้นจนกว่าฉันจะรู้สึกดีกับรูปร่างของเส้นโค้ง
Evan Anderson

คุณต้องให้แนวคิดที่ดีขึ้นเกี่ยวกับสิ่งนี้ มันเป็นเว็บหรือเปล่า aspx? PHP? มีบางสิ่งที่ผลิตเอง? งานแบตช์? พฤติกรรมของ asp.net นั้นแตกต่างจากโหลดของ exes ที่ทำงานอยู่ในกล่อง คุณต้องการแนวคิดพื้นฐานเกี่ยวกับระบบที่ใช้ต่อผู้ใช้ ตัวเลข - แล้วซองเก่า วิธีรับตัวเลขเหล่านั้นขึ้นอยู่กับระบบของคุณ
Ian Murphy

@Evan ฉันมักจะใช้จุดข้อมูลมากกว่าสองจุดเสมอ
Martin Brown

@Ian: "แนวคิดพื้นฐานบางประการเกี่ยวกับสิ่งที่ระบบใช้ต่อผู้ใช้" เป็นสิ่งที่ฉันพยายามค้นหา ถ้าฉันรู้สิ่งนี้ฉันก็ไม่จำเป็นต้องถามคำถาม ฉันได้อัปเดตคำถามเพื่อพยายามครอบคลุมประเด็นอื่น ๆ ของคุณ
Martin Brown

คำตอบ:


8

สุจริต? ฉันDO NOT
เมื่อระบุเซิร์ฟเวอร์ที่จะเห็นปริมาณงานจริงใด ๆ ที่ฉันยัดเยียดใน RAM มากเท่าที่ฉันสามารถจ่ายได้พอสมควร (ระบบมีแนวโน้มที่จะจบข้อ จำกัด RAM มากกว่า CPU หรือดิสก์ที่ จำกัด - คอขวดที่รับประกันอื่น ๆ เท่านั้นคือด้านหน้า รถบัส)

หากคุณต้องการทราบว่า RAM ของคุณแอปพลิเคชันของคุณอาจใช้การทดสอบการโหลดพื้นฐานอย่างที่คุณเสนอมาเป็นการเริ่มต้นที่ดี แต่ถ้าคุณมีระบบนี้อยู่แล้ว(ดูเหมือนว่าคุณจะทำ) และระบบการผลิตของคุณก็เปลี่ยน งานง่ายขึ้น: ดูว่าคุณใช้พื้นที่สว็อปมากน้อยแค่ไหน -> เพิ่ม RAM อย่างน้อย 2x นั้น (ปัดขึ้นเพื่อให้พอดีกับข้อ จำกัด ขนาด DIMM ของระบบ)

หากคุณทำการทดสอบโหลดเพื่อรับตัวเลขคร่าวๆและคาดการณ์จากนั้นอย่าลืมคำนึงถึงปัจจัยในบางสิ่ง:

  1. เส้นโค้งหน่วยความจำอาจจะเป็นสองส่วนที่แตกต่างกัน
    (ทางลาดเริ่มต้นที่คมชัดขึ้นเนื่องจากเฟรมเวิร์ก / ไลบรารีที่แชร์ถูกแคชจากนั้นเส้นโค้งที่ชันน้อยกว่าเล็กน้อยเนื่องจากแต่ละโค้ดที่ไม่สามารถแชร์ได้ของแอปใหม่

  2. คุณยังต้องการ RAM ว่างสำหรับดิสก์และการแคชไลบรารีที่ใช้ร่วมกันและสำหรับระบบปฏิบัติการ
    (ควรมีอย่างน้อย 2-3 กิ๊กเกี่ยวกับสิ่งที่แอพของคุณต้องการ)

  3. ซอฟต์แวร์ทั้งหมดมีหน่วยความจำรั่ว (อย่างน้อยซอฟต์แวร์ที่ใช้งานได้จริงทั้งหมด) ดังนั้นโปรดตรวจสอบในการทดสอบของคุณและตรวจสอบให้แน่ใจว่าคุณมีที่ว่างสำหรับการรั่วไหล

  4. โหลดของคุณอาจเพิ่มขึ้นตลอดอายุการใช้งานของเซิร์ฟเวอร์ วางแผนตาม
    (หากคุณไม่มีหมายเลขการวางแผนความจุที่ดีให้เพิ่มปริมาณงานและวางแผนเป็นสองเท่าของวันนี้)

  5. การซื้อแรมมากเกินไปในวันนี้นั้นถูกกว่าสภาพแวดล้อมของคุณในวันพรุ่งนี้

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

ฉันเห็นด้วยกับข้อพิสูจน์
mfinni


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

0

ขอบคุณการอัปเดตอย่างน้อยทำให้ทุกคนมีเงื่อนงำ คุณใคร่ครวญถึง 2Tb ของหน่วยความจำหมายความว่าคุณกำลังเล่นใน ballpark ที่แตกต่างกับการตั้งค่าปกติ ระบบใหญ่ เกลียดที่จะคิดว่าความร้อนจะออกมามากแค่ไหน

ระบุว่าเป็นกระบวนการเซิร์ฟเวอร์ภายในและคุณมีหน่วยความจำไม่เพียงพอ (คุณไม่ได้พูดว่าคุณเริ่มเพจจิ้งระดับใด) แต่ฉันต้องการกำจัดความเป็นไปได้ที่กระบวนการเซิร์ฟเวอร์จะใช้หน่วยความจำในปริมาณที่มากขึ้นกว่าเดิม ต่อไป หากสิ่งนี้เกิดขึ้นมันไม่ได้ทำให้ความแตกต่างของสิ่งที่คุณทำระบบจะหยุดในบางจุด

ฉันไม่รู้เครื่องมือทั่วไปที่คุณสามารถใช้เพื่อให้คุณมากกว่าภาพรวมพื้นฐานของสิ่งที่เกิดขึ้น ... สิ่งที่มาพร้อมกับ Windows กระบวนการบริการนั้นเป็นกล่องดำและทีมนักพัฒนาของคุณจำเป็นต้องมีเครื่องมือตรวจสอบ

ย้อนกลับอย่างรวดเร็วของการคำนวณซองจดหมาย:

2Tb of memory = 1024Gb = 1024*1024Mb = 1048576Mb
1048576Mb / 13000 connections = around 80mb per session

นี่จะไม่อยู่ในช่วงของชุดการทำงาน. exe exe ปกติ

บริการมีหลายเธรดหรือไม่ หากพวกเขากำลังเรียกใช้เธรดสำหรับแต่ละการเชื่อมต่อมันจะคุ้มค่าที่จะดูว่าพวกเขากำลังทำสิ่งนี้อย่างไร ProcExp.exe จาก microsoft เป็นวิธีที่ง่ายในการดูว่าคุณมีหลายเธรดหรือไม่และเธรดเหล่านั้นใช้งานอย่างไร มันไม่รู้เกี่ยวกับ. net แต่จะให้ win32 ตัวนับ

คุณสามารถระบุจำนวนหน่วยความจำและจำนวนการเชื่อมต่อที่คุณมีเมื่อทำการทดสอบก่อนเริ่มเพจจิ้ง?

ดังนั้นวิธีการสร้างหากกระบวนการเซิร์ฟเวอร์มีปัญหาหน่วยความจำรั่ว? อาจมีการสะสมหน่วยความจำมากขึ้นเมื่อเชื่อมต่อแต่ละเซสชันหรืออาจเป็นการสะสมหน่วยความจำและไม่ทำให้หน่วยความจำว่างมากขึ้น

สิ่งที่คุณสามารถทำได้คือเลือกจำนวนเซสชันที่ไม่กระตุ้นการเพจและจำลองจำนวนการเชื่อมต่อ - ทำการจำลองในเวลาไม่กี่ชั่วโมงและใช้ perfmon เพื่อดูเคาน์เตอร์หน่วยความจำพื้นฐาน - ทำซ้ำการทดสอบเหล่านี้ด้วยเซสชันที่เชื่อมต่อสั้น ๆ และยกเลิกการเชื่อมต่อ

แนวคิดในการดูว่าบริการใช้หน่วยความจำมากขึ้นเรื่อย ๆ ในแต่ละเซสชันหรือไม่หรือถ้าเซสชันเปิดทำให้เกิดการใช้งานหน่วยความจำเพิ่มขึ้น

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