อะไรคือความแตกต่างระหว่างรายงานการใช้หน่วยความจำในการตรวจสอบระบบและรายงานฟรี


14

ฉันใช้การตรวจสอบระบบ 2.28.0 เมื่อฉันดูในแท็บทรัพยากรฉันเห็นกราฟที่ดีสำหรับหน่วยความจำและการสลับ หน่วยความจำประมาณ 60% 2.3 GiB 3.8 เมื่อฉันพิมพ์คำสั่งฟรีฉันได้รับ:

             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

cat / proc / meminfo | grep MemFree ให้

MemFree:           34536 kB

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

ขอบคุณ

คำตอบ:


15

ความแตกต่างคือหน่วยความจำ "บัฟเฟอร์" และ "แคช" รวมอยู่ในการนับ "ใช้" หรือไม่

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


             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

หากคุณเพิ่ม "บัฟเฟอร์" และ "แคช" แล้วลบออกจากคอลัมน์ "ใช้แล้ว" คุณจะได้บรรทัดที่สองภายใต้ "ใช้แล้ว" (บรรทัดที่ขึ้นต้นด้วย-/+ buffers/cache) ซึ่งแสดงประมาณ 2.3G (2384512) ใน ใช้ซึ่งตรงกับหน่วยความจำรายงานที่ใช้ในการตรวจสอบระบบที่มีการรายงาน (มันจะไม่สนใจบัฟเฟอร์ / แคชเพราะพวกเขาจะหายไปเพื่อให้มีที่ว่างสำหรับกระบวนการเพิ่มเติม)

grep ของคุณ/proc/meminfoตรงกับคอลัมน์ "ฟรี" ของบรรทัดแรก (32512 ใกล้เคียงกับ 34536 - อาจเป็นไปได้ว่าการเปลี่ยนแปลงระหว่างเอาต์พุตคำสั่งสองรายการ)


ขอบคุณฉันสงสัยว่าทำไมระบบต้องการแคช 1.5 กิกะไบต์ แต่นั่นทำให้ชัดเจน
Guillaume Coté

1
มันเป็นเรื่องของ "ความต้องการ" น้อยกว่า "ใช้แล้ว" ณ เวลานั้นมันได้อ่านอย่างน้อยมากจากฮาร์ดไดรฟ์และเก็บไว้ในหน่วยความจำสำรองในกรณีที่จำเป็นต้องใช้อีกครั้ง
Kees Cook

0

เมื่อฉันได้มือของฉันในระบบการตรวจสอบการใช้งานหน่วยความจำที่มีการรายงานในแท็บ "ทรัพยากร" ได้เหมือนกันกว่าคอลัมน์free/usr/bin/free

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

ดังนั้นฉัน / เราตัดสินใจที่จะทำเช่นเดียวกับสายของ-/+ buffers/cache: /usr/bin/freeด้วยวิธีนี้กราฟมีความหมายแบบเต็มและให้ผู้ใช้ดูการใช้งานหน่วยความจำ ~ application / userland แทนสถานะทางกายภาพของหน่วยความจำ

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

Solaris ปัจจุบันมีปัญหาเดียวกัน: ZFS Cache (ARC) ไม่รวมอยู่ในหน่วยความจำฟรีที่รายงานโดยเครื่องมือvmstatที่ทำให้ผู้ดูแลฐานข้อมูลโง่ ๆ บ่นว่า "ZFS is bad" :)

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