Làm thế nào để có được% sử dụng bộ nhớ với vmstat?


9

Tôi cần nhận mức sử dụng bộ nhớ theo% từ vmstat, nhưng tôi không hiểu lắm về một số con số liên quan đến bộ nhớ được hiển thị trong vmstat.

Đặc biệt, đưa ra một đầu ra như thế này

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

Số lượng tổng bộ nhớ của hệ thống là gì? Có phải là 'swpd' + 'miễn phí' + 'buff' + 'cache', tổng cộng là 1620612 không?

Dung lượng bộ nhớ miễn phí của hệ thống là bao nhiêu? Có phải 45394, như được hiển thị trong cột 'miễn phí' không?

Vấn đề là họ không thêm hoặc thậm chí nhìn gần với những gì 'top' đã báo cáo. Đầu ra của 'top' mà tôi mất cùng thời gian với 'vmstat' ở trên là:

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

Vì vậy, ... tôi giả sử phải có các số / tùy chọn ẩn trong 'vmstat' mà tôi không biết?

Tôi cần sử dụng 'vmstat' cho mục đích này chứ không phải các lệnh khác vì đây là những gì yêu cầu đã nêu.

Rất lý tưởng, điều tôi muốn đạt được từ 'vmstat' là mức sử dụng% bộ nhớ, như trong:

<used_memory>/<total_memory> * 100%.

Cảm ơn!


Câu trả lời:


20

Những gì bạn đang tìm kiếm là đầu ra từ "miễn phí":

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

Đây là một tour du lịch:

Đây là hộp w / 768MB RAM vật lý và phân vùng trao đổi 500344KB.

759456KB được "sử dụng" (cột thứ hai, hàng trên cùng). Trong bộ nhớ "đã sử dụng" này, 23132KB là bộ đệm (cột thứ 5, hàng trên cùng) và 592484KB (cột thứ sáu, hàng trên cùng) là bộ đệm, để lại 144840KB (cột thứ 2, hàng thứ 2) của bộ nhớ vật lý đang được sử dụng bởi các quy trình hoạt động.

Khi bạn cho rằng bộ nhớ được sử dụng bởi bộ đệm và bộ đệm có thể được sử dụng cho các quy trình, sẽ để lại 630716KB (cột thứ 3, hàng thứ 2) không có bộ nhớ vật lý.

Phân vùng trao đổi, như tôi đã nói, là 500344KB (cột thứ 1, hàng dưới cùng). 21972KB (cột thứ 2, hàng dưới cùng) của tệp hoán đổi đang được sử dụng, để lại 478372KB (cột thứ 3, hàng dưới cùng) miễn phí.

Vì vậy, định nghĩa về% bộ nhớ trống của bạn phụ thuộc vào việc bạn có đang đếm bộ đệm và bộ đệm hay không và liệu bạn có đang trao đổi hay không.

Điều đó phải cung cấp cho bạn đủ để tiếp tục tính toán tỷ lệ phần trăm khi bạn thấy phù hợp.


Đây là đầu ra của hàng đầu và miễn phí:

$ 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

Bạn có thể thấy cách đồng ý hàng đầu và miễn phí (mặc dù có một chút khác biệt-- đây là một máy nhiều người dùng và việc sử dụng bộ nhớ của các chương trình hàng đầu và miễn phí được phản ánh trong đó).


Thêm một "-s" khi bạn gọi vmstate và bạn sẽ thấy nhiều đầu ra giống nhau, chỉ ở một dạng khác:

$ 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

Bạn có thể thấy rằng vmstat đang hiển thị tất cả các số giống như miễn phí.


Câu trả lời hay nhất tôi đã tìm thấy về chủ đề phức tạp này!
rinogo

2

Tôi có cùng câu hỏi với bạn và đưa ra một công thức

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}'

Tôi đã thử nghiệm nó trên phiên bản vmstat từ Procps-ng 3.3.10 và vmstat từ Procps-ng 3.3.9


1

Tôi khuyên bạn nên đọc qua "Sách hướng dẫn điều chỉnh và hiệu suất Linux" của IBM Redbook ( http://www.redbooks.ibm.com/abstracts/redp4285.html?Open ). Nó có chi tiết về dữ liệu được trả về bởi nhiều lệnh và sẽ giúp bạn.

Tôi thường sử dụng lệnh "miễn phí" trong Linux hoặc "cat / Proc / meminfo".


0

Đây là hàm shell POSIX làm tròn phần trăm mong muốn xuống số nguyên gần nhất (đối với mục đích tạo kịch bản, điều này có thể hữu ích hơn, vì các phép thử so sánh số học của vỏ POSIX chỉ hoạt động với các số nguyên):

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

Đầu ra (trên hệ thống của tôi):

12

Điều tương tự, với free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.