如何使用 vmstat 獲取 % 記憶體使用率?
我需要從 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,顯示在“免費”列中嗎?
問題是他們沒有加起來甚至看起來接近“頂部”報告的內容。我與上面的“vmstat”大約同時使用的“top”的輸出是:
[...] Mem: 4059616k total, 3965504k used, 94112k free, 200020k buffers [...]
所以…我假設’vmstat’中必須有我不知道的隱藏數字/選項?
為此,我需要使用“vmstat”而不是其他命令,因為這是要求的內容。
所以理想情況下,我想從“vmstat”實現的是記憶體使用百分比,如:
<used_memory>/<total_memory> * 100%.
謝謝!
您正在尋找的是“免費”的輸出:
$ free total used free shared buffers cached Mem: 775556 759456 16100 0 22132 592484 -/+ buffers/cache: 144840 630716 Swap: 500344 21972 478372
這是一個遊覽:
這是一個帶有 768MB 物理 RAM 和 500344KB 交換分區的盒子。
759456KB 已“使用”(第二列,頂行)。在這個“已用”記憶體中,23132KB 是緩衝區(第 5 列,頂行),592484KB(第 6 列,頂行)是高速記憶體,剩下 144840KB(第 2 列,第 2 行)物理記憶體正在被活動程序使用。
當您考慮緩衝區和高速記憶體使用的記憶體可用於程序時,剩下 630716KB(第 3 列,第 2 行)物理記憶體可用。
正如我所說,交換分區是 500344KB(第一列,底行)。交換文件的 21972KB(第 2 列,底行)正在使用中,剩餘 478372KB(第 3 列,底行)空閒。
因此,您對可用記憶體百分比的定義取決於您是否計算緩衝區和記憶體,以及是否計算交換。
這應該足以讓您繼續計算您認為合適的百分比。
這是 top 和 free 的輸出:
$ 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
您可以看到 top 和 free 是如何達成一致的(儘管有一點不同——這是一台多使用者機器,並且 top 和 free 程序的記憶體使用情況都反映在其中)。
呼叫 vmstate 時添加一個“-s”,您將看到幾乎相同的輸出,只是形式不同:
$ 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 將所有相同的數字顯示為空閒。