จะเข้าใจการใช้งานหน่วยความจำและโหลดเฉลี่ยในเซิร์ฟเวอร์ linux อย่างไร


57

ฉันใช้เซิร์ฟเวอร์ linux ซึ่งมีหน่วยความจำ 128GB และ 24 cores ฉันใช้ด้านบนเพื่อดูว่ามีการใช้งานมากแค่ไหน เอาท์พุทของมันจะถูกวางในตอนท้ายของโพสต์ นี่คือคำถามสองข้อ:

(1) ฉันเห็นว่ากระบวนการที่ทำงานอยู่แต่ละอันมีหน่วยความจำน้อยมาก (% MEM ไม่เกิน 0.2% และส่วนใหญ่แค่ 0.0%) แต่วิธีการที่หน่วยความจำทั้งหมดถูกนำมาใช้เช่นเดียวกับในบรรทัดที่สี่ ( "Mem: ผลรวม 130766620k, ใช้แล้ว 130161072k, ฟรี 605548k, 919300k บัฟเฟอร์")? ผลรวมของเปอร์เซ็นต์หน่วยความจำที่ใช้ไปในกระบวนการทั้งหมดดูเหมือนไม่น่าจะบรรลุเกือบ 100% ใช่ไหม?

(2) วิธีทำความเข้าใจค่าเฉลี่ยการโหลดในบรรทัดแรก ("ค่าเฉลี่ยการโหลด: 14.04, 14.02, 14.00")

ขอบคุณและขอแสดงความนับถือ!

แก้ไข:

ขอบคุณ!

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

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

คุณจะพิจารณาการใช้งาน CPU หรือหน่วยความจำ (หรือหน่วยความจำ + สลับ) ร่วมกันอย่างไร คุณเป็นกังวลไหมหากทั้งคู่สูงเกินไปหรือทั้งสองอย่าง?

การส่งออกของด้านบน:

$ ด้านบน

 
ด้านบน - 12:45:33 ขึ้น 19 วัน, 23:11, ผู้ใช้ 18 คน, โหลดเฉลี่ย: 14.04, 14.02, 14.00
งาน: รวม 484 ครั้ง, ทำงาน 12 ครั้ง, 472 นอนหลับ, 0 หยุดแล้ว, 0 ซอมบี้
Cpu: 36.7% เรา, 19.7% sy, 0.0% ni, 43.6% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st
Mem: รวม 130766620k, ใช้แล้ว 130161072k, ฟรี 605548k, 919300k บัฟเฟอร์
สลับ: ผลรวม 63111312k, ใช้ 500556k, ฟรี 62610756k, แคช 124437752k

  PID ผู้ใช้ PR NI VIRT RES SHR S% CPU% MEM TIME + คำสั่ง
 6529 sanchez 18 -2 1075m 219m 13m S 100 0.2 13760: 23 MATLAB
13210 ทิโมธี 18 -2 48336 37m 1216 R 100 0.0 3: 56.75 ไร้สาระ
13888 ทิโมธี 18 -2 48336 37m 1204 R 100 0.0 2: 04.89 ไร้สาระ
14542 ทิโมธี 18 -2 48336 37m 1196 R 100 0.0 1: 08.34 ไร้สาระ
14544 ทิโมธี 18 -2 2888 2076 400 R 100 0.0 1: 06.14 รวบรวมข้อมูล
 6183 sanchez 18 -2 1133m 195m 13m S 100 0.2 13676: 04 MATLAB
 6795 sanchez 18 -2 1079m 210m 13m S 100 0.2 13734: 26 MATLAB
10178 ทิโมธี 18 -2 48336 37m 1204 R 100 0.0 11: 33.93 ไร้สาระ 
12438 ทิโมธี 18 -2 48336 37m 1216 R 100 0.0 5: 38.17 ไร้สาระ
13661 ทิโมธี 18 -2 48336 37m 1216 R 100 0.0 2: 44.13 ไร้สาระ
14098 ทิโมธี 18 -2 48336 37m 1204 R 100 0.0 1: 58.31 ไร้สาระ
14335 ทิโมธี 18 -2 48336 37m 1196 R 100 0.0 1: 08.93 ไร้สาระ
14765 ทิโมธี 18 -2 48336 37m 1196 R 99 0.0 0: 32.57 ไร้สาระ
13445 ทิโมธี 18 -2 48336 37m 1216 R 99 0.0 3: 01.37 ไร้สาระ
28990 root 20 0 0 0 0 S 2 0.0 65: 50.21 pdflush
12141 เวลา 18 -2 19380 1660 1024 R 1 0.0 0: 04.04
 1240 root 15 -5 0 0 0 S 0 0.0 16: 07.11 kjournald
 9019 รูท 20 0 296m 4460 2616 S 0 0.0 82: 19.51 kdm_greet
    1 รูท 20 0 4028 728 592 S 0 0.0 0: 03.11 init
    2 root 15 -5 0 0 0 S 0 0.0 0: 00.00 kthreadd
    3 root RT -5 0 0 0 S 0 0.0 0: 01.01 โยกย้าย / 0
    4 root 15 -5 0 0 0 S 0 0.0 0: 08.13 ksoftirqd / 0
    5 root RT -5 0 0 0 S 0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 0
    6 root RT -5 0 0 0 S 0 0.0 17: 27.31 การโยกย้าย / 1
    7 root 15 -5 0 0 0 S 0 0.0 0: 01.21 ksoftirqd / 1
    8 root RT -5 0 0 0 S 0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 1
    9 root RT -5 0 0 0 S 0 0.0 10: 02.56 การโยกย้าย / 2
   10 root 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 2
   11 root RT -5 0 0 0 S 0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 2
   12 root RT -5 0 0 0 S 0 0.0 4: 29.53 การโยกย้าย / 3
   13 root 15 -5 0 0 0 S 0 0.0 0: 00.34 ksoftirqd / 3

2
ดูสิ่งนี้สำหรับคำตอบที่ดีเกี่ยวกับหน่วยความจำ serverfault.com/questions/38065/#38074
Zoredache

และคำตอบสำหรับการสรุปอย่างรวดเร็วเกี่ยวกับค่าเฉลี่ยของการโหลด (หรือรายละเอียดที่อ่านมานาน)
Nickolay

คำตอบ:


56

(1) ฉันเห็นว่ากระบวนการที่ทำงานอยู่แต่ละอันมีหน่วยความจำน้อยมาก (% MEM ไม่เกิน 0.2% และส่วนใหญ่แค่ 0.0%) แต่วิธีการที่หน่วยความจำทั้งหมดถูกนำมาใช้เช่นเดียวกับในบรรทัดที่สี่ ( "Mem: ผลรวม 130766620k, ใช้แล้ว 130161072k, ฟรี 605548k, 919300k บัฟเฟอร์")? ผลรวมของเปอร์เซ็นต์หน่วยความจำที่ใช้ไปในกระบวนการทั้งหมดดูเหมือนไม่น่าจะบรรลุเกือบ 100% ใช่ไหม?

free -mเพื่อดูว่าหน่วยความจำมากคุณกำลังใช้เรียก มันจะให้ผลลัพธ์เช่น:

             แคชบัฟเฟอร์ที่ใช้ร่วมกันทั้งหมดที่ใช้หมดแล้ว
Mem: 2012 1923 88 0 91 515
- / + บัฟเฟอร์ / แคช: 1316 695
แลกเปลี่ยน: 3153 256 2896

แถวบนสุด 'ใช้' (1923) ค่าเกือบจะตรงกับค่า mem แถวบนสุด (2012) เกือบทุกครั้ง เนื่องจาก Linux ชอบใช้หน่วยความจำสำรองเพื่อแคชบล็อกดิสก์ (515)

ตัวเลขที่ใช้เพื่อดูคือค่าบัฟเฟอร์ที่ใช้ / แถวแคช (1316) นี่เป็นพื้นที่ใช้งานแอปพลิเคชันของคุณในปัจจุบัน เพื่อประสิทธิภาพที่ดีที่สุดหมายเลขนี้ควรน้อยกว่าหน่วยความจำทั้งหมดของคุณ (2012) เพื่อป้องกันข้อผิดพลาดของหน่วยความจำไม่จำเป็นต้องน้อยกว่าหน่วยความจำทั้งหมด (2012) และพื้นที่สว็อป (3153)

หากคุณต้องการดูจำนวนหน่วยความจำที่ว่างให้ดูที่ค่าฟรีของบัฟเฟอร์ / แคชแถว (695) นี่คือหน่วยความจำทั้งหมด (2012) - ของจริงที่ใช้ (1316) (2012 - 1316 = 696 ไม่ใช่ 695 นี่จะเป็นปัญหาการปัดเศษ)

(2) วิธีทำความเข้าใจค่าเฉลี่ยการโหลดในบรรทัดแรก ("ค่าเฉลี่ยการโหลด: 14.04, 14.02, 14.00")

บทความเกี่ยวกับค่าเฉลี่ยการโหลดใช้การเปรียบเทียบการรับส่งข้อมูลที่ดีและเป็นสิ่งที่ดีที่สุดที่ฉันเคยพบ: การทำความเข้าใจกับการโหลด CPU ของ Linux - เมื่อใดที่คุณควรกังวล . ในกรณีของคุณในขณะที่ผู้คนชี้ให้เห็น:

บนระบบที่มีโปรเซสเซอร์หลายตัวโหลดจะสัมพันธ์กับจำนวนแกนประมวลผลที่มีอยู่ เครื่องหมาย "การใช้ประโยชน์ 100%" คือ 1.00 ในระบบแบบแกนเดียว 2.00 บนแบบดูอัลคอร์ 4.00 บนควอดคอร์เป็นต้น

ดังนั้นด้วยโหลดเฉลี่ย 14.00 และ 24 คอร์เซิร์ฟเวอร์ของคุณไม่ได้รับการโหลดมากเกินไป


17

ระบบ Unix like systems รวมถึง linux ได้รับการออกแบบมาเพื่อให้สามารถใช้งาน RAM ได้อย่างมีประสิทธิภาพสูงสุด โดยทั่วไปแล้วมี 3 สถานะของ RAM แต่ละ MB ที่สามารถอยู่ใน:

  1. ฟรี
  2. ใช้โดยกระบวนการ
  3. ใช้สำหรับบัฟเฟอร์

สถานะที่ 3 ใช้เป็นพื้นที่เริ่มต้นเท่านั้นและมีวัตถุประสงค์ที่จะกำหนดใหม่เมื่อใดก็ตามที่จำเป็นเช่นหน่วยความจำที่มีอยู่ทั้งหมดของคุณสำหรับโปรแกรมนั้นฟรี + UsedforBuffers จริง ๆ ดังนั้นคุณจะไม่เห็นบัฟเฟอร์ที่จัดสรรพื้นที่ปรากฏขึ้นตามที่กำหนดให้กับกระบวนการเฉพาะใด ๆ

คำถามเฉลี่ยในการโหลดของคุณน่าสนใจกว่าเล็กน้อยเนื่องจากสามารถตีความผิดได้ง่าย สำหรับเรื่องเต็มเห็นนี้บทความ linuxjournal การสรุปที่ดีที่สุดคือการอ้างอิงโดยตรงจากบทความ

การคำนวณภาระเฉลี่ยเป็นความคิดที่ดีที่สุดว่าเป็นค่าเฉลี่ยเคลื่อนที่ของกระบวนการในการรันคิวของ Linux ที่ทำเครื่องหมายการทำงานหรือไม่สามารถขัดจังหวะ

หมายความว่าคุณสามารถคิดว่าโหลดเฉลี่ยของคุณเป็น (# ของกระบวนการที่กำลังทำงานอยู่) + (# ของกระบวนการที่กำลังรอ IO) โปรดทราบว่าในเวลาใดก็ตามคุณสามารถมีจำนวนกระบวนการ $ CORE ที่ถูกดำเนินการฉันจะบอกว่าค่าเฉลี่ยโหลดของคุณที่ 14 นั้นค่อนข้างต่ำ


ขอบคุณ! เปอร์เซ็นต์ของหน่วยความจำที่ใช้ (หรือหน่วยความจำ + สลับ) ถือเป็นภาระหนักและดีกว่าที่จะไม่เรียกใช้กระบวนการใหม่คืออะไร? คุณดูทั้งหน่วยความจำหรือหน่วยความจำ + แลกเปลี่ยน? ขนาดของการแลกเปลี่ยนที่ใช้แสดงอยู่ด้านบนของขนาดการแลกเปลี่ยนที่ใช้จริงหรือไม่ เกี่ยวกับค่าเฉลี่ยภาระของ CPU คุณวัดค่าจริงของโหลดด้วย "ค่าเฉลี่ยโหลด / จำนวนแกน" คุณคิดว่าเซิร์ฟเวอร์โหลดมากแค่ไหน ขอบคุณและขอแสดงความนับถือ!
ทิม

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

4

จากsarหน้าคน:

       ค่าเฉลี่ยการโหลดจะคำนวณเป็นจำนวนเฉลี่ยของ runnable หรือ 
       งานที่กำลังทำงาน (สถานะ R) และจำนวนของงานที่ไม่สามารถขัดจังหวะได้
       sleep (D state) ในช่วงเวลาที่ระบุ

จากuptimeหน้าคน:

       ค่าเฉลี่ยของโหลดระบบคือจำนวนกระบวนการเฉลี่ยที่เป็นเช่นนั้น
       อยู่ในสถานะ runnable หรือ uninterruptable กระบวนการในสถานะที่รันได้
       กำลังใช้งาน CPU อยู่หรือกำลังรอใช้งาน CPU อยู่ กระบวนการในหน่วยเดียว
       สถานะที่สามารถเกิดการระเบิดได้กำลังรอการเข้าถึง I / O บางอย่างเช่นรอดิสก์
       ค่าเฉลี่ยจะได้รับในช่วงเวลาสามครั้ง โหลดค่าเฉลี่ย
       ไม่ถูกทำให้เป็นมาตรฐานสำหรับจำนวนของ CPU ในระบบดังนั้นค่าเฉลี่ยการโหลด
       อายุ 1 หมายถึงระบบ CPU เดียวถูกโหลดตลอดเวลาในขณะที่ 4
       ระบบ CPU หมายความว่ามันไม่ได้ใช้งาน 75% ของเวลา

3
  1. Linux ในขณะนี้ได้จัดการหน่วยความจำในลักษณะที่ทำให้topไร้ประโยชน์โดยทั่วไปทำให้หน่วยความจำส่วนใหญ่ของเครื่องถูกจัดสรรสำหรับการใช้งานที่หลากหลายเมื่อไม่ต้องการโดยกระบวนการผู้ใช้
  2. โหลดเฉลี่ยคือจำนวนเฉลี่ยของกระบวนการทำงานหรือรอให้ทำงาน มันมักจะมีความสัมพันธ์เชิงลบที่แข็งแกร่งกับความล่าช้าของระบบ / การตอบสนองดังนั้นคุณจึงต้องการให้มันต่ำที่สุด เนื่องจากซีพียูแต่ละตัวของคุณสามารถทำงานบางอย่างได้ตามเวลาที่กำหนด แต่ดูเหมือนว่าคุณจะทำได้ดีมากที่ 14

ขอบคุณ! เกี่ยวกับ 1 คุณหมายถึงว่ากระบวนการบางอย่างไม่ปรากฏขึ้นด้านบน แต่ใช้หน่วยความจำจำนวนมากหรือไม่ หรือว่าบรรทัดที่สี่ของเอาต์พุตเกี่ยวกับหน่วยความจำ ("Mem: รวม 130766620k, ใช้ 130161072k, ฟรี 605548k, 919300k บัฟเฟอร์") ทำให้เข้าใจผิดฉันควรดูผลรวมของเปอร์เซ็นต์หน่วยความจำที่ใช้โดยกระบวนการทั้งหมดที่แสดงอยู่ด้านบนและในกรณีของฉัน ฉันสามารถรันกระบวนการที่ใช้หน่วยความจำใหม่ได้อย่างปลอดภัยหรือไม่
ทิม

2
ดังที่คำตอบอื่น ๆ ได้ระบุไว้โหลดเฉลี่ยควรเปรียบเทียบกับจำนวนตัวประมวลผลดังนั้น 14 จึงไม่มากบนระบบ 24 คอร์ มันจะเป็นเช่น 14/24 = 0.58 ในระบบแบบแกนเดียว (ชนิดดี)
David Z

@Tim: ฉันหมายถึงหลัง
ความวุ่นวาย

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