การเปลี่ยนแปลงในเอาต์พุต `free 'จาก 14.04 ถึง 16.04 หมายถึงอะไร?


29

ฉันสังเกตเห็นว่าการfreeรายงานคำสั่งมีการเปลี่ยนแปลงระหว่าง Trusty และ Xenial นี่คือสิ่งที่ `ฟรี -m 'แสดงบนคอมพิวเตอร์ Trusty เครื่องหนึ่งของฉัน:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7916       7645        271         99        455       1764
-/+ buffers/cache:       5426       2490
Swap:        24999        805      24194

นี่คือระบบ Xenial ที่เทียบเท่า (ต่างกัน):

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3553        1192         857          16        1504        2277
Swap:          3689           0        3689

+/- บัฟเฟอร์ / แคชบรรทัดที่ฉันใช้เพื่อดูเป็นหลักหายไป ฉันจะตีความหมายเลขใหม่ได้อย่างไร

  • Mem ที่ใช้ / ฟรีมีบัฟเฟอร์และแคชหรือไม่
  • หมายเลขใดเทียบเท่ากับหมายเลขที่ใช้และฟรีในบรรทัด "+/- บัฟเฟอร์ / แคช" ของรุ่นก่อนหน้า

คำตอบ:


16

โปรดพิจารณาผลลัพธ์ตัวอย่างที่ฉันได้รับจากfreeคำสั่งในUbuntu 12.04:

           total       used       free     shared    buffers     cached
Mem:       8074640    6187480    1887160     377056     365128    2113156
-/+ buffers/cache:    3709196    4365444
Swap:     15998972      82120   15916852

Memused (kb_main_used) ค่าของฟิลด์จะถูกคำนวณในขณะนี้เช่นนี้

used = total - free - cached - buffers

ก่อนหน้านี้เคยเป็น:

used = total - free

การเปลี่ยนแปลงนี้มีการนำมาใช้ในการยอมรับhttps://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9ต่อไปนี้

ค่ากลาง:

buffers_plus_cached = buffers (kb_main_buffers) + cached (kb_main_cached) = 365128 + 2113156 = 2478284

+/- ค่าบัฟเฟอร์ / แคชคำนวณเช่นนี้:

buffers = kb_main_used - buffers_plus_cached = 6187480 - 2478284 = 3709196
/
cache = kb_main_free + buffers_plus_cached = 1887160 + 2478284 = 4365444

ค่า buff / cache ใหม่จะคำนวณดังนี้:

buff/cache = kb_main_buffers+kb_main_cached = 365128 + 2113156 = 2478284

นี่เป็นเช่นเดียวกับที่buffers_plus_cachedใช้ในรุ่นก่อนหน้านี้ความแตกต่างคือก่อนหน้านี้มันถูกใช้ภายในและตอนนี้มันแสดงโดยตรงและบรรทัดที่คำนวณเพิ่มเติม-/+ buffers/cacheได้ถูกลบออก

สำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบกระทำเหล่านี้ที่มีการเปลี่ยนแปลงเหล่านี้ได้ถูกนำมา: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c9908b59712d1afd6b9bf7971ba1d8900ae5adb8

ในฐานะของavailableเขตข้อมูลใหม่สำหรับเคอร์เนล Linux ที่เก่ากว่า 2.6.27 ค่าของมันจะเหมือนกับfreeค่า แต่สำหรับเคอร์เนลรุ่นใหม่กว่าจะแตกต่างกันเล็กน้อย:

Estimation of how much memory  is  available  for  starting  new
applications,  without swapping. Unlike the data provided by the
cache or free fields, this field takes into account  page  cache
and also that not all reclaimable memory slabs will be reclaimed
due to  items  being  in  use  (MemAvailable  in  /proc/meminfo,
available   on   kernels  3.14,  emulated  on  kernels  2.6.27+,
otherwise the same as free)

มารยาท: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

ดังนั้นคำตอบเฉพาะสำหรับคำถามของคุณคือ:

  • เวอร์ชั่นใหม่ของfreeรวมบัฟเฟอร์ / แคชในการคำนวณMem used/freeค่า
  • ตอนนี้+/- buffers/cacheค่าที่เคยมีในรุ่นก่อนหน้านี้freeจะพร้อมใช้งานเป็น:
    • - / + บัฟเฟอร์ / แคชused = Mem usedคอลัมน์ปัจจุบัน(การคำนวณมีรายละเอียดด้านบน)
    • - / + บัฟเฟอร์ / แคชfreeมีอยู่ในค่าที่ถูกต้องมากขึ้นในคอลัมน์ใหม่ปัจจุบันavailable

หมายเหตุ:kb_*ชื่อตัวแปรที่มีชื่อภายในใช้ในรหัสที่มา


1
คำตอบนี้สามารถปรับปรุงได้โดยการใส่คำตอบเฉพาะ = "the tl; dr part" ที่ด้านบนและรายละเอียดด้านล่าง (ตอนนี้มันเป็นสิ่งที่ตรงกันข้าม)
Nikana Reklawyks

นี่เป็นคำอธิบายที่ดี แต่ใน OpenVZ ที่ใช้ Ubuntu 16.04 ฉันเห็นว่า "ว่าง" ไม่ได้เข้ามาใกล้กับคอลัมน์ฟรีใน "+/- บัฟเฟอร์ / แคช" ใน "ฟรี" ก่อนหน้า เมื่อมีแอพพลิเคชั่นตัวเดียวกันฉันได้รับ 120MB ฟรีที่ 14.04 และใกล้กับ 0 ที่มีอยู่ใน 16.04 การใช้งาน ram นั้นแตกต่างอย่างสิ้นเชิงกับทั้งสองระบบหรือแพ็คเกจที่ฟรีนั้นผิด (หรือเป็นเพียง OpenVZ ที่เป็นระเบียบสำหรับสิ่งเหล่านี้)
Sandro Antonucci
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.