在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ free 查詢(xún)可用內(nèi)存
進(jìn)程管理工具
objdump 二進(jìn)制文件分析
scp 跨機(jī)遠(yuǎn)程拷貝
crontab 定時(shí)任務(wù)
readelf elf文件格式分析
pstack 跟蹤進(jìn)程棧
系統(tǒng)管理及IPC資源管理
vmstat 監(jiān)視內(nèi)存使用情況
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
sar 找出系統(tǒng)瓶頸的利器
ipcs 查詢(xún)進(jìn)程間通信狀態(tài)
ps 進(jìn)程查看器
性能優(yōu)化
wget 文件下載
top linux下的任務(wù)管理器
磁盤(pán)管理
size 查看程序內(nèi)存映像大小
free 查詢(xún)可用內(nèi)存
文件及目錄管理
iostat 監(jiān)視I/O子系統(tǒng)
性能監(jiān)控
程序構(gòu)建
學(xué)會(huì)使用命令幫助
gdb 調(diào)試?yán)?/span>
網(wǎng)絡(luò)工具
nm 目標(biāo)文件格式分析
lsof 一切皆文件
用戶管理工具
程序調(diào)試
ldd 查看程序依賴(lài)庫(kù)
文本處理

free 查詢(xún)可用內(nèi)存

free工具用來(lái)查看系統(tǒng)可用內(nèi)存::

/opt/app/tdev1$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的運(yùn)行結(jié)果,一共有4行。為了方便說(shuō)明,我加上了列號(hào)。這樣可以把free的輸出看成一個(gè)二維數(shù)組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的輸出一共有四行,第四行為交換區(qū)的信息,分別是交換的總量(total),使用量(used)和有多少空閑的交換區(qū)(free),這個(gè)比較清楚,不說(shuō)太多。

free輸出地第二行和第三行是比較讓人迷惑的。這兩行都是說(shuō)明內(nèi)存使用情況的。第一列是總量(total),第二列是使用量(used),第三列是可用量(free)。

  第一行的輸出時(shí)從操作系統(tǒng)(OS)來(lái)看的。也就是說(shuō),從OS的角度來(lái)看,計(jì)算機(jī)上一共有:

24677460KB(缺省時(shí)free的單位為KB)物理內(nèi)存,即FO[2][1]; 在這些物理內(nèi)存中有23276064KB(即FO[2][2])被使用了; 還用1401396KB(即FO[2][3])是可用的;

這里得到第一個(gè)等式:

FO[2][1] = FO[2][2] + FO[2][3]

FO[2][4]表示被幾個(gè)進(jìn)程共享的內(nèi)存的,現(xiàn)在已經(jīng)deprecated,其值總是0(當(dāng)然在一些系統(tǒng)上也可能不是0,主要取決于free命令是怎么實(shí)現(xiàn)的)。

FO[2][5]表示被OS buffer住的內(nèi)存。FO[2][6]表示被OS cache的內(nèi)存。在有些時(shí)候buffer和cache這兩個(gè)詞經(jīng)?;煊?。不過(guò)在一些比較低層的軟件里是要區(qū)分這兩個(gè)詞的,看老外的洋文::

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.

也就是說(shuō)buffer是用于存放要輸出到disk(塊設(shè)備)的數(shù)據(jù)的,而cache是存放從disk上讀出的數(shù)據(jù)。這二者是為了提高IO性能的,并由OS管理。

Linux和其他成熟的操作系統(tǒng)(例如windows),為了提高IO read的性能,總是要多cache一些數(shù)據(jù),這也就是為什么FO[2][6](cached memory)比較大,而FO[2][3]比較小的原因。我們可以做一個(gè)簡(jiǎn)單的測(cè)試:

釋放掉被系統(tǒng)cache占用的數(shù)據(jù)::

echo 3>/proc/sys/vm/drop_caches
  1. 讀一個(gè)大文件,并記錄時(shí)間;
  2. 關(guān)閉該文件;
  3. 重讀這個(gè)大文件,并記錄時(shí)間;

第二次讀應(yīng)該比第一次快很多。原來(lái)我做過(guò)一個(gè)BerkeleyDB的讀操作,大概要讀5G的文件,幾千萬(wàn)條記錄。在我的環(huán)境上,第二次讀比第一次大概可以快9倍左右。

free輸出的第二行是從一個(gè)應(yīng)用程序的角度看系統(tǒng)內(nèi)存的使用情況。

  • 對(duì)于FO[3][2],即-buffers/cache,表示一個(gè)應(yīng)用程序認(rèn)為系統(tǒng)被用掉多少內(nèi)存;
  • 對(duì)于FO[3][3],即+buffers/cache,表示一個(gè)應(yīng)用程序認(rèn)為系統(tǒng)還有多少內(nèi)存;

因?yàn)楸幌到y(tǒng)cache和buffer占用的內(nèi)存可以被快速回收,所以通常FO[3][3]比FO[2][3]會(huì)大很多。

這里還用兩個(gè)等式::

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中讀出的。

在系統(tǒng)上可能有meminfo(2)這個(gè)函數(shù),它就是為了解析/proc/meminfo的。procps這個(gè)包自己實(shí)現(xiàn)了meminfo()這個(gè)函數(shù)。可以下載一個(gè)procps的tar包看看具體實(shí)現(xiàn),現(xiàn)在最新版式3.2.8。

文章出處:

http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html