วิธีรับการใช้งานหน่วยความจำ% ด้วย vmstat?


9

ฉันต้องได้รับการใช้หน่วยความจำ% จาก vmstat แต่ฉันไม่เข้าใจตัวเลขที่เกี่ยวข้องกับหน่วยความจำที่แสดงใน vmstat

โดยเฉพาะให้ผลลัพธ์เช่นนี้

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 139728  45396 199128 1236360    1    2     4   622    3    1 51  4 43  2  0

จำนวนหน่วยความจำทั้งหมดของระบบคือเท่าไหร่? มันคือ 'swpd' + 'free' + 'buff' + 'cache' ซึ่งรวมไปถึง 1620612

จำนวนหน่วยความจำว่างของระบบคือเท่าใด มันคือ 45396 ตามที่ปรากฏในคอลัมน์ 'ฟรี' หรือไม่

ปัญหาคือพวกเขาไม่ได้เพิ่มหรือดูใกล้เคียงกับสิ่งที่ 'ยอดนิยม' รายงาน ผลลัพธ์ของ 'top' ที่ฉันใช้เวลาประมาณเดียวกันกับ 'vmstat's ด้านบนคือ:

[...]
Mem:   4059616k total,  3965504k used,    94112k free,   200020k buffers
[...]

ดังนั้น ... ฉันสมมติว่าจะต้องมีตัวเลข / ตัวเลือกที่ซ่อนอยู่ใน 'vmstat' ที่ฉันไม่รู้

ฉันต้องใช้ 'vmstat' เพื่อจุดประสงค์นี้และไม่ใช่คำสั่งอื่น ๆ เนื่องจากนี่เป็นข้อกำหนดที่ระบุไว้

ดังนั้นสิ่งที่ฉันต้องการให้ได้จาก 'vmstat' คือการใช้หน่วยความจำ% ดังที่:

<used_memory>/<total_memory> * 100%.

ขอบคุณ!


คำตอบ:


20

สิ่งที่คุณกำลังมองหาคือผลลัพธ์จาก "ฟรี":

$ free
             total       used       free     shared    buffers     cached
Mem:        775556     759456      16100          0      22132     592484
-/+ buffers/cache:     144840     630716
Swap:       500344      21972     478372

นี่คือทัวร์:

นี่คือกล่องฟิสิคัลแรมที่มี 768MB และพาร์ทิชัน swap 500344KB

759456KB คือ "ใช้แล้ว" (คอลัมน์ที่สองแถวบนสุด) ของหน่วยความจำ "ใช้แล้ว" นี้ 23132KB เป็นบัฟเฟอร์ (คอลัมน์ที่ 5, แถวบน) และ 592484KB (คอลัมน์ที่หก, แถวบนสุด) คือแคชทำให้ 144840KB (คอลัมน์ที่ 2, แถวที่ 2) ของหน่วยความจำกายภาพที่ถูกใช้โดยกระบวนการที่ทำงานอยู่

เมื่อคุณพิจารณาว่าหน่วยความจำที่ใช้โดยบัฟเฟอร์และแคชสามารถใช้สำหรับกระบวนการซึ่งจะปล่อยให้ 630716KB (คอลัมน์ที่ 3, แถวที่ 2) ของหน่วยความจำกายภาพไม่มีค่า

พาร์ติชั่นสว็อปอย่างที่ฉันพูดคือ 500344KB (คอลัมน์ที่ 1, แถวล่าง) 21972KB (คอลัมน์ที่ 2, แถวล่าง) ของไฟล์ swap ถูกใช้งานอยู่โดยไม่เสียค่าใช้จ่าย 478372KB (คอลัมน์ที่ 3, แถวล่าง) ฟรี

ดังนั้นคำจำกัดความของคุณของหน่วยความจำฟรี% ขึ้นอยู่กับว่าคุณกำลังนับบัฟเฟอร์และแคชหรือไม่และไม่ว่าคุณจะนับการแลกเปลี่ยนหรือไม่

นั่นควรให้พอที่จะคำนวณเปอร์เซ็นต์ตามที่เห็นสมควร


นี่คือผลลัพธ์ของยอดนิยมและฟรี:

$ top -n1 | grep "used," ; free
Mem:    775556k total,   751472k used,    24084k free,    20776k buffers
Swap:   500344k total,    21972k used,   478372k free,   586648k cached

             total       used       free     shared    buffers     cached
Mem:        775556     751344      24212          0      20776     586648
-/+ buffers/cache:     143920     631636
Swap:       500344      21972     478372

คุณสามารถเห็นได้ว่ายอดนิยมและฟรีเห็นด้วย (แม้ว่าจะมีข้อแตกต่างเล็กน้อย - นี่คือเครื่องที่มีผู้ใช้หลายคนและการใช้หน่วยความจำของโปรแกรมยอดนิยม


เพิ่ม "-s" เมื่อคุณเรียก vmstate และคุณจะเห็นผลลัพธ์เดียวกันมากในรูปแบบที่แตกต่างกัน:

$ vmstat -s ; free
       775556  total memory
       759920  used memory
       674680  active memory
        18440  inactive memory
        15636  free memory
        21892  buffer memory
       594372  swap cache
       500344  total swap
        21972  used swap
       478372  free swap
       ... output truncated ...

             total       used       free     shared    buffers     cached
Mem:        775556     759920      15636          0      21892     594372
-/+ buffers/cache:     143656     631900
Swap:       500344      21972     478372

คุณจะเห็นว่า vmstat แสดงหมายเลขเดียวกันทั้งหมดฟรี


คำตอบที่ดีที่สุดที่ฉันพบในเรื่องที่ซับซ้อนนี้!
rinogo

2

ฉันมีคำถามเดียวกันกับคุณและคิดสูตร

vmstat -s | awk  ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'

ฉันได้ทดสอบกับรุ่น vmstat จาก procps-ng 3.3.10 และ vmstat จาก procps-ng 3.3.9


1

ฉันขอแนะนำให้คุณอ่าน IBM Redbook "แนวทางปฏิบัติเกี่ยวกับประสิทธิภาพและการปรับแต่ง Linux" ของ IBM Redbook ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open ) มันมีรายละเอียดเกี่ยวกับข้อมูลที่ส่งคืนโดยคำสั่งมากมายและควรช่วยคุณ

ฉันมักจะใช้คำสั่ง "ฟรี" ใน Linux หรือ "cat / proc / meminfo"


0

นี่คือฟังก์ชันเชลล์POSIXที่ปัดเปอร์เซ็นต์ที่ต้องการลงไปเป็นจำนวนเต็มที่ใกล้เคียงที่สุด (เพื่อจุดประสงค์ในการเขียนสคริปต์ซึ่งอาจมีประโยชน์มากกว่าเนื่องจากPOSIXเชลล์การคำนวณทางคณิตศาสตร์เปรียบเทียบการทดสอบใช้ได้กับเลขจำนวนเต็มเท่านั้น):

# Vmstat (derived) Used Ram Percent
vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
vurp

เอาท์พุท (ในระบบของฉัน):

12

สิ่งเดียวกันกับfree:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.