จะตีความเอาต์พุตของคำสั่ง“ free -m” ได้อย่างไร?


48

ผลลัพธ์ของfree -mคือ:

                     total    used    free    shared  buffers  cached
Mem:                  595      482     112         0       63     324
-/+ buffers/cache:              93     501
swap:                   0        0       0

หน่วยความจำที่ใช้มีค่าใดถูกต้อง 482 หรือ 93

คำตอบ:


40

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

นี่เป็นสิ่งที่ดีเพราะหน่วยความจำที่ไม่ได้ใช้เป็นหน่วยความจำที่ไร้ประโยชน์ หน่วยความจำแคชสามารถล้างถ้าจำเป็น "ฉันต้องล้างหน่วยความจำ" แบบเก่า ๆ ที่ผู้คนเคยทำกับ windows 95 ไม่จำเป็นต้องใช้ที่นี่: ทุกอย่างเรียบร้อยดีและมีความสุข :)

หมายเลขที่คุณค้นหาคือ501ฟรี (เป็นเมกะไบต์เนื่องจาก-m)

ดูการอ้างอิงหน้าเหล่านี้:

http://www.linuxatemyram.com/
http://www.itworld.com/it-managementstrategy/280695/making-sense-memory-usage-linux


โดยพื้นฐาน: "แค่ดูบรรทัดที่สองบรรทัดที่มีบัฟเฟอร์ / แคช"
Nanne

25

การตีความผลลัพธ์ของfree:
บรรทัดแรกของfreeรายการผลลัพธ์:

  • total หน่วยความจำทั้งหมดที่มีอยู่จริง (สมมติว่าไม่มีการจำลองเสมือน) ของคุณ
  • used มีการใช้เท่าใดในปัจจุบัน (โดยอะไร)
  • free จำนวนที่ฟรีทั้งหมด (ไม่ได้ใช้เลย)
  • shared (ไม่ต้องทำอะไรเลยละเว้นคอลัมน์นั้น)
  • buffers หน่วยความจำที่ใช้โดยเคอร์เนลบัฟเฟอร์
  • cached หน่วยความจำที่ใช้สำหรับแคช

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

เนื่องจากคอลัมน์ทั้งสองนี้ไม่ใช่หน่วยความจำที่จัดสรรโดยผู้ใช้และโซนสามารถลดขนาดลง (เป็นศูนย์) หากผู้ใช้ต้องการการจัดสรรจึงมีความรู้สึกว่า "ว่าง" - มี RAM ที่สามารถทำให้เคอร์เนลว่างหากแอปของคุณ แข็งขันต้องการมัน

นั่นคือสิ่งที่บรรทัดที่สองจะบอกคุณ มันลบหน่วยความจำบัฟเฟอร์และแคชออกจากusedคอลัมน์ (นั่นคือสิ่งที่-หมายถึง) และเพิ่ม ( +) ลงในfreeคอลัมน์ (ปัญหาการปัดเศษจะเกิดขึ้น)

(บรรทัดสุดท้ายแสดงสถานะของพื้นที่สว็อปของคุณ)

มารยาท: https://unix.stackexchange.com/a/33549/14497

ดังนั้นในกรณีของคุณ112MBเป็นหน่วยความจำที่สมบูรณ์โดยสมบูรณ์และหากคุณคำนึงถึงหน่วยความจำที่ใช้สำหรับการแคชซึ่งสามารถจัดสรรให้กับแอปพลิเคชันผู้ใช้หากจำเป็น จากนั้น501 MBเป็นหน่วยความจำสูงสุดที่แท้จริงสำหรับใช้งาน


คนที่กำลังมองหาหน่วยความจำที่อ่านได้ไม่เคยสนใจ (หรือเกือบจะไม่เคย) ในหน่วยความจำที่ว่างเปล่าโดยสิ้นเชิง หน่วยความจำแคชคือ 'ใช้อยู่' แต่ยังมีอิสระในการใช้ดังนั้นคุณควรดูที่
Nanne

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

@Nanne โอเค ฉันเห็นด้วยกับผู้ชาย ขอบคุณสำหรับการแก้ไข ฉันได้อัปเดตคำตอบเพื่อให้สะท้อนเช่นเดียวกัน
saji89

##### ขอขอบคุณทุกท่าน @ Nanne @ devav2 @ saji89 สำหรับการแบ่งปันความรู้ - คุณยอดเยี่ยม #####
amoooc

10

คำตอบโดย @ saji89 ยอดเยี่ยม แต่วันนี้free -mไม่พิมพ์-/+ buffers/cacheบรรทัดอีกต่อไปแต่จะใส่จำนวน RAM ที่มีอยู่ในavailableคอลัมน์ใหม่ในบรรทัดแรกแทน:

ubuntu@pg_master:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          61406        1571         506       17131       59328       42150
Swap:             0           0           0
ubuntu@pg_master:~$ free -V
free from procps-ng 3.3.10

คุณสามารถอ่านได้กระทำการที่จะเป็นอิสระ (1) ที่เอาออกบรรทัดใน repo นอกจากนี้ยังได้กระทำการที่จะเพิ่มใหม่availableคอลัมน์


4

free คำสั่งแสดงข้อมูลเกี่ยวกับหน่วยความจำและพื้นที่สว็อปที่ไม่ได้ใช้และใช้แล้ว

ด้านล่างนี้เป็นคำอธิบายที่จัดทำโดยhttp://www.linfo.org/free.html

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

บรรทัดที่สองของข้อมูลซึ่งเริ่มต้นด้วย- / + บัฟเฟอร์ / แคชแสดงจำนวนหน่วยความจำฟิสิคัลในปัจจุบันที่ใช้กับแคชบัฟเฟอร์ของระบบ สิ่งนี้มีความหมายโดยเฉพาะอย่างยิ่งสำหรับแอ็พพลิเคชันโปรแกรมเนื่องจากข้อมูลทั้งหมดที่เข้าถึงจากไฟล์บนระบบที่ดำเนินการผ่านการใช้ read () และ write () ระบบ calls1 ส่งผ่านแคชนี้ แคชนี้สามารถเพิ่มความเร็วในการเข้าถึงข้อมูลได้อย่างมากโดยการลดหรือกำจัดความจำเป็นในการอ่านหรือเขียนข้อมูลลงใน HDD หรือดิสก์อื่น ๆ

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

ให้วิเคราะห์การใช้หน่วยความจำของระบบของคุณ

คุณใช้freeคำสั่งพร้อมตัวเลือก '-m' ซึ่งใช้เพื่อแสดงผลลัพธ์เป็นเมกะไบต์

-m, --mega
              Display the amount of memory in megabytes.

หน่วยความจำทั้งหมดคือ 595 (ใช้ + ฟรี)

ใช้แล้ว: 482 ฟรี: 112

ระบบของคุณใช้ 482MB จาก 595MB ซึ่งมีเพียง 93MB เท่านั้นที่ใช้งานโดยโปรแกรมที่ใช้งานและ 324MB ที่เหลืออยู่ในแคช

ดังนั้นเมื่อคุณเรียกใช้โปรแกรมใด ๆ ในอนาคตให้พูดว่าโปรแกรมใดต้องการขนาด 120MB ขึ้นไป จะได้รับทั้งหมด 112MB (ฟรีในปัจจุบัน) และส่วนที่เหลืออีก 8MB จะมาจากบัฟเฟอร์ / แคชโปรแกรมที่ไม่ทำงาน

แก้ไข : พบลิงค์นี้ซึ่งให้คำอธิบายที่ดี


ฉันไม่คิดว่ามันถูกต้อง หากคุณละทิ้งแคชคุณมี 93mb ที่ใช้ดังนั้นคุณจึงเหลือ 501
Nanne

ทำไมคุณคิดว่ามันไม่ถูกต้อง หน่วยความจำว่างในระบบ OP เป็น 112MB + 324MB (ซึ่งถูกแคช) ดังนั้นเมื่อโปรแกรมใหม่เริ่มทำงานมันจะใช้ 112MB ก่อนแล้วจึงทำการแคช
devav2

โดยพื้นฐานแล้วเพราะ595-93=501 และ (ให้หรือรับ 1mb สำหรับการปัดเศษ) และมันก็อ่านราวกับว่า112เป็นตัวเลขที่คุณคิดว่า op กำลังมองหา
Nanne

501 ถูกต้องและนั่นคือสิ่งที่ฉันพยายามอธิบาย จาก 595 มีการใช้ 482 ซึ่งใน 93 เท่านั้นเป็นหน่วยความจำที่ใช้งานอยู่ที่ใช้โดยโปรแกรม ดังนั้น 112 จึงเป็นฟรี + ที่จำเป็นเพิ่มเติมหน่วยความจำสามารถนำมาจากแคชซึ่งก่อนหน้านี้เคยใช้และไม่ได้ใช้งานอยู่ในปัจจุบัน
devav2

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