Linux free詳細說明

2021-09-01 07:06:03 字數 3808 閱讀 4183

$ free

total       used        free    shared buffers cached

mem:    255268      238332      16936       0   85540   126384

-/+ buffers/cache: 26408       228860

swap:   265000      0           265000

mem:表示物理記憶體統計

-/+ buffers/cached:表示物理記憶體的快取統計

swap:表示硬碟上交換分割槽的使用情況,這裡我們不去關心。

系統的總物理記憶體:255268kb(256m),但系統當前真正可用的記憶體b並不是第一行free 標記的16936kb,它僅代表未被分配的記憶體。

我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計資料的各值,1、2 分別代表第一行和第二行的資料。

total1:    表示物理記憶體總量。

used1:     表示總計分配給快取(包含buffers 與cache )使用的數量,但其中可能部分快取並未實際使用。

free1:     未被分配的記憶體。

shared1:   共享記憶體,一般系統不會用到,這裡也不討論。

buffers1: 系統分配但未被使用的buffers 數量。

cached1:   系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。

used2:     實際使用的buffers 與cache 總量,也是實際使用的記憶體總量。

free2:     未被使用的buffers 與cache 和未被分配的記憶體之和,這就是系統當前實際可用記憶體。

total1 = used1 + free1

total1 = used2 + free2

used1   = buffers1 + cached1 + used2

free2   = buffers1 + cached1 + free1

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.

更詳細的解釋參考:difference between buffer and cache

cache 和buffer的區別:

cache: 快取記憶體,是位於cpu與主記憶體間的一種容量較小但速度很高的儲存器 。由於cpu的速度遠高於主記憶體,cpu直接從記憶體中訪問資料要等待一定時間周 期,cache中儲存著cpu剛用過或迴圈使用的一部分資料,當cpu再次使用該部分資料時可從cache中直接呼叫,這樣就減少了cpu的等待時間,提 高了系統的效率。cache又分為一級cache(l1 cache)和二級cache(l2 cache),l1 cache整合在cpu內部,l2 cache早期一般是焊在主機板上,現在也都整合在cpu內部,常見的容量有256kb或512kb l2 cache。

buffer:緩衝區,乙個用於儲存速度不同步的裝置 或優先順序不同的裝置 之間傳輸資料的區域。通過緩衝區,可以使程序之間的相互等待變少,從而使從速度慢的裝置讀入資料時,速度快的裝置的操作程序不發生間斷。

free中的buffer和cache:(它們都是占用記憶體):

buffer: 作為buffer cache的記憶體 ,是塊 裝置的讀寫緩衝區

cache: 作為page cache的記憶體, 檔案系統的cache

如果cache 的值很大,說明cache住的檔案數很多。如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀io bi會非常小。

buffer和cache的區別

快取(cached)是把讀取過的資料 儲存起來,重新讀取時若命中(找到需要的資料)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。

緩衝(buffers)是根據磁碟的讀寫 設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統效能。linux有乙個守護程序定 期清空緩衝內容(即寫如磁碟),也可以通過sync命令手動清空緩衝。舉個例子吧:我這裡有乙個ext2的u盤,我往裡面cp乙個3m的***,但u盤的 燈沒有跳動,過了一會兒(或者手動輸入sync)u盤的燈就跳動起來了。解除安裝裝置時會清空緩衝,所以有些時候解除安裝乙個裝置時要等上幾秒鐘。

兩者都是ram中的資料。簡單來說,buffer是即將要被寫入磁碟的,而cache是被從磁碟中讀出來的。

buffer是由各種程序分配的,被用在如輸入佇列等方面,乙個簡單的例子如某個程序要求有多個字段讀入,在所有欄位被讀入完整之前,程序把先前讀入的字段放在buffer中儲存。

cache經常被用在磁碟的i/o請求上,如果有多個程序都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提供系統效能。

linux 的記憶體管理,實際上跟windows 的 記憶體管理有很相像的地方,都是用虛擬記憶體這個的概念,說到這裡不得 不罵ms,為什麼在很多時候還有很大的物理記憶體的時候,卻還是用到了pagefile. 所以才經常要跟一幫人吵著說pagefile的大小,以及如何分配這個問題,在linux大家就不用再吵什麼swap大小的問題,我個人認為,swap設 個512m已經足夠了,如果你問說512m的swap不夠用怎麼辦?只能說大哥你還是加記憶體吧,要不就檢查你的應用,是不是真的出現了memory leak.

在linux下檢視記憶體我們一般用command free

[root@nonamelinux ~]# free

total           used       free     shared    buffers     cached

mem:    386024      377116      8908       0            21280     155468

-/+ buffers/cache:     200368    185656

swap:    393552            0          393552

下面是對這些數值的解釋:

第二行(mem):

total:總計物理記憶體的大小。

used:已使用多大。

free:可用有多少。

shared:多個程序共享的記憶體總額。

buffers/cached:磁碟快取的大小。

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第四行就不多解釋了。

區別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。

第三行所指的是從應用程式角度來看,對於應用程式來說,buffers/cached 是等於可用的,因為buffer/cached是為了提高檔案讀取的效能,當應用程式需在用到記憶體的時候,buffer/cached會很快地被**。

所以從應用程式的角度來說,可用記憶體=系統free(memory+buffers+cached.)

如上例:

185656 = 8908+21280+155468

接下來解釋什麼時候記憶體會被交換,以及按什麼方交換。

當可用記憶體少於額定值的時候,就會開會進行交換.

如何看額定值(rhel4.0):

#cat /proc/meminfo

交換將通過三個途徑來減少系統中使用的物理頁面的個數: 

1.減少緩衝與頁面cache的大小,

2.將系統v型別的記憶體頁面交換出去, 

事實上,少量地使用swap是不是影響到系統效能的。

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.請求訪問action的路徑,必須以 開頭 type hello.he...

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 name forward1 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.name forward2 path a...

Linux free m 詳細說明

linux記憶體中buffer與cache的區別 free 命令相對於top 提供了更簡潔的檢視系統記憶體使用情況 free total used free shared buffers cached mem 255268 238332 16936 0 85540 126384 buffers ca...