วิธีการใช้หน่วยความจำ (ใช้ RAM) โดยใช้คำสั่ง Linux


30

ฉันพยายามดึงหน่วยความจำที่ใช้ (RAM) เป็นเปอร์เซ็นต์โดยใช้คำสั่ง Linux cpanel ของฉันแสดงหน่วยความจำที่ใช้ซึ่งฉันต้องการแสดงบนหน้าเว็บเฉพาะ

จากฟอรั่มฉันพบว่าหน่วยความจำที่ถูกต้องสามารถพบได้จากต่อไปนี้:

free -m

ผล:

-/+ buffers/cache:        492       1555

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


3
ที่ได้รับคำตอบที่นี่แล้ว! stackoverflow.com/questions/10585978/… เช่น: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher

@szboardstretcher ฉันชอบสิ่งนี้:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me

โดยไม่ทราบว่าคุณต้องการหมายเลขเพราะยากที่จะบอกหมายเลขที่คุณควรใช้ อย่างไรก็ตามในหลาย ๆ กรณีตัวเลขเหล่านี้ไร้เดียงสามากและต้องการข้อมูลแนวโน้มและบริบท
eckes

คำตอบ:


33

นี่คือตัวอย่างผลลัพธ์จากฟรี:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

รายการตัวเลขบรรทัดแรก ( Mem:)

  • total หน่วยความจำ
  • used หน่วยความจำ
  • free หน่วยความจำ
  • การใช้งานของ shared
  • การใช้งานของ buffers
  • แคชระบบไฟล์การใช้งาน ( cached)

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

บรรทัดถัดไป ( -/+ buffers/cache:) ให้หน่วยความจำที่ใช้จริงกับหน่วยความจำว่างหากไม่มีบัฟเฟอร์หรือแคช

บรรทัดสุดท้าย ( Swap) ให้การใช้งานหน่วยความจำ swap ไม่มีบัฟเฟอร์หรือแคชสำหรับการสลับเนื่องจากจะไม่เหมาะสมที่จะวางสิ่งเหล่านี้ลงบนดิสก์ที่มีอยู่จริง

ในการแสดงผลหน่วยความจำที่ใช้ (ลบบัฟเฟอร์และแคช) คุณสามารถใช้คำสั่งเช่น:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

นี่จะคว้าบรรทัดที่สามและหารใช้ / รวม * 100

และสำหรับหน่วยความจำฟรี:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657

1
"- / + บัฟเฟอร์ / แคช: 5779440 18904464" การใช้ RAM / สถานะของเซิร์ฟเวอร์ถูกต้องหรือไม่
codelogn

2
พูดอย่างเคร่งครัดไม่ แต่พูดจริงใช่ การใช้หน่วยความจำจริงคือบรรทัดที่ 2 (ใช้แล้ว: 20746840) แต่ส่วนหนึ่งของการใช้หน่วยความจำนั้นคือบัฟเฟอร์และแคชซึ่งเป็นเพียงเพื่อเพิ่มความเร็วเวลาตอบสนองในระบบของคุณ บรรทัดที่สาม (ใช้แล้ว: 5779440) ให้ปริมาณหน่วยความจำที่คุณใช้จริงโดยโปรแกรมและเป็นตัวเลขหน่วยความจำที่กำหนดว่าโปรแกรมของคุณสามารถจัดสรรได้มากเพียงใด หากเป้าหมายของคุณคือการได้รับหน่วยความจำที่ว่าง / ใช้แล้วในแง่ที่ว่าโปรแกรมใดกำลังใช้งานจริงและสิ่งที่คุณสามารถจัดสรรได้จริงแล้วใช่แล้วบรรทัดที่ 3 นั้นถูกต้องสำหรับคุณ
casey

1
ทราบว่ามีรุ่นใหม่กว่าfree, -/+ buffers/cacheถูกละไว้อย่างสมบูรณ์โดยเจตนาและความคุ้มค่าที่แสดงในusedคอลัมน์นี้ไม่รวมบัฟเฟอร์และแคชโดยค่าเริ่มต้น ดูที่นี่: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson

10

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

นี้จะอธิบายได้อย่างชัดเจนที่นี่ ฉันจะพยายามอธิบายจากสิ่งที่ฉันมีในระบบของฉัน

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

ตอนนี้ให้เราดูว่าตัวเลขต่าง ๆ แสดงถึงอะไร

สาย 1

  • 7869หมายถึงหน่วยความจำ / ฟิสิคัลแรมพร้อมใช้งานสำหรับเครื่องของฉัน
  • 4402หมายถึงหน่วยความจำ / RAM ที่ใช้โดยระบบของฉัน
  • 3466หมายถึง RAM โดยรวมฟรีและพร้อมใช้งานสำหรับกระบวนการใหม่ที่จะเรียกใช้
  • 0 หมายถึงหน่วยความจำที่แชร์ คอลัมน์นี้ล้าสมัยและอาจถูกลบออกในอนาคตฟรี
  • 208 ระบุ RAM ทั้งหมดที่บัฟเฟอร์โดยแอปพลิเคชั่นที่แตกต่างกันใน Linux
  • 3497หมายถึง RAM ทั้งหมดที่ใช้สำหรับการแคชข้อมูลเพื่อจุดประสงค์ในอนาคต

line2

-/+ buffers/cache:        696       7173

จะคำนวณค่า 696 และ 7173 ที่ได้รับใน Line2 ได้อย่างไร?

Total used ( 4402 ) - RAM บัฟเฟอร์รวม ( 208 ) - RAM ทั้งหมดสำหรับการแคช ( 3497 ) ควรประกอบด้วยRAM ที่ใช้จริงในระบบ ส่งคืนฉัน697ซึ่งเป็นเอาต์พุตRAM ที่ใช้จริงในบรรทัดที่สอง

ตอนนี้Total Available ( 7869 ) - ใช้จริง ( 696 ) ควรให้หน่วยความจำฟรีซึ่งเป็น7173ในกรณีนี้ซึ่งได้รับเป็นเอาต์พุตในบรรทัดที่สอง


6

แม้ว่าจะซ้ำกันตามที่ระบุโดย @szboardstretcher การตั้งค่าของฉันจากการแก้ปัญหา (ในคำถามเดิม) เป็นหนึ่งในด้านล่างเป็นพิเศษเนื่องจากคุณต้องการแยกวิเคราะห์ไปยังหน้าเว็บ

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

เอาท์พุท:

used: 82.68%, buffers: 42.81%, swap: 1.27%

4
FYI ฉันได้รับสิ่งต่อไปนี้โดยใช้สิ่งนี้used: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj

คำสั่งเต็มใช้อะไร ฉันตรวจสอบมันใน centos
Simply_Me

ขออภัยสำหรับการจัดรูปแบบ แต่ที่นี่คุณจะไป$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj

สำหรับบางรุ่น awk (mawk) เครื่องหมายเปอร์เซ็นต์จะต้องเพิ่มเป็นสองเท่าในการพิมพ์มิฉะนั้น awk จะเกิดข้อผิดพลาดเช่นนี้: printf ("ใช้:% .0f %%"), $ 3 / $ 2 * 100 ทั้งเหยี่ยวและเหยี่ยว
JánLalinský

2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

เพิ่มบรรทัดใหม่หลังหมายเลข swap


1

สำหรับ CentOS 7 ไม่เกินคุณสามารถลอง

cat /proc/meminfo 

เพื่อดูการใช้งานจริงของหน่วยความจำตามกระบวนการ

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