ความหมายของบรรทัดบัฟเฟอร์ / แคชในเอาต์พุตของฟรี


168

ทำไมเซิร์ฟเวอร์ของฉันถึงแสดง

            total      used      free   shared buffers    cached
    Mem: 12286456  11715372    571084        0   81912   6545228
-/+ buffers/cache:  5088232   7198224
   Swap: 24571408     54528  24516880

ฉันไม่มีความคิดในการคำนวณหน่วยความจำใน linux ฉันคิดว่ามันบอกว่าใช้ 5088232 ในกรณีที่ฟรี 7198224 หมายความว่ามันใช้ RAM 5GB จริงหรือ



คำตอบ:


232

ความหมายของค่า

บรรทัดแรกหมายถึง:

  • total: RAM ทั้งหมด (ทางกายภาพ) ของคุณ (ยกเว้นบิตเล็ก ๆ น้อย ๆ ที่เคอร์เนลสำรองอย่างถาวรสำหรับตัวเองเมื่อเริ่มต้น); นั่นเป็นเหตุผลว่าทำไมมันแสดงถึงแคลิฟอร์เนีย 11.7 GiB และไม่ใช่ 12 GiB ซึ่งคุณอาจมี
  • used: หน่วยความจำที่ใช้โดยระบบปฏิบัติการ
  • free: หน่วยความจำไม่ได้ใช้งาน

total= used+free

  • shared/ buffers/ cached: usedนี่แสดงให้เห็นถึงการใช้งานหน่วยความจำสำหรับวัตถุประสงค์เฉพาะค่าเหล่านี้จะรวมอยู่ในค่าสำหรับ

บรรทัดที่สองให้การปรับค่าบรรทัดแรก มันให้ค่าเดิมสำหรับused ลบผลรวมbuffers+cachedและค่าดั้งเดิมสำหรับfree บวกผลรวมbuffers+cachedดังนั้นชื่อของมัน ค่าใหม่เหล่านี้มักจะมีความหมายมากกว่าค่าบรรทัดแรก

บรรทัดสุดท้าย ( Swap:) ให้ข้อมูลเกี่ยวกับการใช้พื้นที่สว็อป (เช่นเนื้อหาหน่วยความจำที่ถูกย้ายไปยังดิสก์ชั่วคราว)

พื้นหลัง

เพื่อให้เข้าใจถึงความหมายของตัวเลขคุณจำเป็นต้องมีพื้นหลังเล็กน้อยเกี่ยวกับระบบย่อยหน่วยความจำเสมือน (VM) ใน Linux เพียงแค่เวอร์ชันสั้น ๆ : Linux (เช่นระบบปฏิบัติการที่ทันสมัยที่สุด) จะพยายามใช้ RAM ฟรีสำหรับการแคชเนื้อหาดังนั้นMem: freeจะเกือบจะต่ำมากเสมอ ดังนั้นบรรทัด-/+ buffers/cache:จะถูกแสดงเนื่องจากมันแสดงจำนวนหน่วยความจำที่ว่างเมื่อไม่สนใจแคช แคชจะถูกปล่อยให้เป็นอิสระโดยอัตโนมัติหากหน่วยความจำว่างดังนั้นมันจึงไม่สำคัญ

ระบบ Linux มีหน่วยความจำเหลือน้อยถ้าfreeค่าใน-/+ buffers/cache:บรรทัดลดลง

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความหมายของตัวเลขให้ดูเช่นคำถาม:

การเปลี่ยนแปลงใน procps 3.3.10

โปรดทราบว่าผลลัพธ์ของfreeการเปลี่ยนแปลงใน procps 3.3.10 (เปิดตัวในปี 2014) คอลัมน์ที่รายงานในขณะนี้คือ"ทั้งหมด", "ใช้แล้ว", "ฟรี", "แบ่งปัน", "buff / cache", "ว่าง"และความหมายของค่าบางอย่างเปลี่ยนไป ขุมทรัพย์

ดูรายงาน Debian Bug # 565518สำหรับแรงจูงใจและการเปลี่ยนแปลงของfreeเอาต์พุตจาก 14.04 ถึง 16.04 หมายถึงอะไร สำหรับข้อมูลรายละเอียดเพิ่มเติม


คุณสามารถเพิ่มความสามารถในการใช้งานแคชชนิดใดบ้าง? มันจะเป็นไฟล์ที่เข้าถึงหรือเครือข่ายหรือไม่
CMCDragonkai

@CMCDragonkai: คำตอบของserverfault.com/questions/23433/…ที่อยู่โดยละเอียดว่าอะไรคือ "แคช" และ "บัฟเฟอร์"
sleske

5
ฉันไม่คิดว่าคำสั่ง "total = used + free" ถูกต้องแล้วดูผลลัพธ์ต่อไปนี้บนเครื่องของฉัน:$ free -h total used free shared buff/cache available Mem: 3.4G 585M 152M 11M 2.6G 2.5G Swap: 4.0G 84M 3.9G
Sebastian

@ เซบาสเตียน: อ่าน่าสนใจ ดูเหมือนว่า ouput ของฟรีจะเปลี่ยนไป (ใน 3.3.10) ฉันแก้ไขคำตอบของฉันเพื่อพูดถึงเรื่องนี้ หากคุณสนใจในการเปลี่ยนแปลงนี้ให้ลองถามคำถามใหม่ :-)
sleske

3
total = used + free + buff/cache
danger89


2

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


และบรรทัดแรก (บรรทัด mem) หมายความว่าอย่างไร
Muahmmad Zeeshan

8
ว่าคุณมี RAM ขนาด 12GB ติดตั้งอยู่ในระบบซึ่งใช้แล้ว 11.5GB และ 0.5GB หรือมากกว่านั้นไม่ได้ใช้งานในปัจจุบัน หน่วยความจำที่ใช้ไปแล้วประมาณ 82MB ใช้สำหรับบัฟเฟอร์ (การเชื่อมต่อเครือข่ายและอื่น ๆ ) ในขณะที่มีการใช้หน่วยความจำขนาด 6.5GB เพื่อเก็บสำเนาข้อมูลบนดิสก์ดังนั้นข้อมูลจะไม่ต้องถูกอ่านซ้ำหากจำเป็นอีกครั้ง
womble

3
@Muhammad: "82MB ฟรี" - ไม่ 57MiB ฟรี (แต่นั่นไม่สำคัญเลยดูคำตอบของฉัน) "ตอนนี้มันหมายความว่าระบบได้ถึงขีด จำกัด " - ไม่เลย ระบบมีการใช้งาน 6.9GiB สำหรับการแคชซึ่งจะให้แอพพลิเคชั่นได้อย่างง่ายดายจึงมีพื้นที่เหลือเฟือ นอกจากนี้การใช้ swap ยังต่ำมาก (ประมาณ 50MiB) หากหน่วยความจำเริ่มตึงตัวการใช้ swap จะเพิ่มขึ้น ในปัจจุบันคุณแทบจะไม่ได้ใช้ RAM เพียงครึ่งเดียว
sleske

4
คุณเคยลองถามคำถามใหม่บ้างไหม?
womble

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