free 檢視系統記憶體使用情況

2021-09-27 04:53:32 字數 2389 閱讀 2869

free 工具用來檢視系統可用記憶體:

total used free shared buffers cached

mem: 8175320 6159248 2016072 0 310208 5243680

-/+ buffers/cache: 605360 7569960

swap: 6881272 16196 6865076

解釋一下 linux 上 free 命令的輸出。

下面是 free 的執行結果,一共有 4 行。為了方便說明,我加上了列號。這樣可以把 free 的輸出看成乙個二維陣列 fo(free output)。例如:

fo[2][1] = 24677460

fo[3][2] = 10321516

1 2 3 4 5 6

1 total used free shared buffers cached

2 mem: 24677460 23276064 1401396 0 870540 12084008

3 -/+ buffers/cache: 10321516 14355944

4 swap: 25151484 224188 24927296

free 的輸出一共有四行,第四行為交換區的資訊,分別是交換的總量(total),使用量(used)和有多少空閒的交換區(free),這個比較清楚,不說太多。

free 輸出地第二行和第三行是比較讓人迷惑的。這兩行都是說明記憶體使用情況的。第一列是總量(total),第二列是使用量(used),第三列是可用量(free)。

第一行的輸出時從作業系統(os)來看的。也就是說,從 os 的角度來看,計算機上一共有:

24677460kb(預設時 free 的單位為 kb)物理記憶體,即 fo[2][1]; 在這些物理記憶體中有 23276064kb(即 fo[2][2])被使用了; 還用 1401396kb(即 fo[2][3])是可用的;

這裡得到第乙個等式:

fo[2][1] = fo[2][2] + fo[2][3]

fo[2][4] 表示被幾個程序共享的記憶體的,現在已經 deprecated,其值總是 0(當然在一些系統上也可能不是 0,主要取決於 free 命令是怎麼實現的)。

fo[2][5] 表示被 os buffer 住的記憶體。fo[2][6] 表示被 os cache 的記憶體。在有些時候 buffer 和 cache 這兩個詞經常混用。不過在一些比較低層的軟體裡是要區分這兩個詞的,看老外的洋文:

a buffer is something that has yet to be "written" to disk.

a cache is something that has been "read" from the disk and stored for later use.

也就是說 buffer 是用於存放要輸出到 disk(塊裝置)的資料的,而 cache 是存放從 disk 上讀出的資料。這二者是為了提高 io 效能的,並由 os 管理。

linux 和其他成熟的作業系統(例如 windows),為了提高 io read 的效能,總是要多 cache 一些資料,這也就是為什麼 fo[2][6](cached memory)比較大,而 fo[2][3] 比較小的原因。我們可以做乙個簡單的測試:

釋放掉被系統 cache 占用的資料:

echo 3>/proc/sys/vm/drop_caches
讀乙個大檔案,並記錄時間;

關閉該檔案;

重讀這個大檔案,並記錄時間;

第二次讀應該比第一次快很多。原來我做過乙個 berkeleydb 的讀操作,大概要讀 5g 的檔案,幾千萬條記錄。在我的環境上,第二次讀比第一次大概可以快 9 倍左右。

free 輸出的第二行是從乙個應用程式的角度看系統記憶體的使用情況。

因為被系統 cache 和 buffer 占用的記憶體可以被快速**,所以通常 fo[3][3] 比 fo[2][3] 會大很多。

這裡還用兩個等式:

fo[3][2] = fo[2][2] - fo[2][5] - fo[2][6]

fo[3][3] = fo[2][3] + fo[2][5] + fo[2][6]

這二者都不難理解。

free 命令由 procps.*.rpm 提供(在 redhat 系列的 os 上)。free 命令的所有輸出值都是從 / proc/meminfo 中讀出的。

free檢視記憶體使用情況

檢視當前記憶體使用情況 xiaoxi xiaoxitest data free m total used free shared buffers cached mem 16080 15918 1610 26290 buffers cache 9625 6454 swap 8191 2167975 m...

LINUX檢視記憶體使用情況 free

顯示結果如下 mem 表示物理記憶體統計 total 記憶體總數 8057964kb used 已使用的記憶體 7852484kb free 空閒的記憶體數 205480kb shared 當前已經廢棄不用,總是0 buffers buffer 快取記憶體數 290432kb cached page...

檢視記憶體使用情況

查詢sqlserver總體的記憶體使用情況select type sum virtual memory reserved kb vm reserved sum virtual memory committed kb vm commited sum awe allocated kb awe alloc...