在linux/unix系統中,內存到底夠不夠用?應用/進程使用了多少內存?本文希望能給出一些的建議能夠有所幫助。
我們經常使用free命令來觀察獲取內存使用情況。
free 輸出的是一個表格,其中的數值都默認以字節(jié)為單位。表格總共有兩行七列,這兩行分別是物理內存 Mem 和交換分區(qū) Swap 的使用情況.而七列中,每列數據的含義分別為:
第一列,total 是總內存大小;
第二列,used 是已使用內存的大小,包含了共享內存;
第三列,free 是未使用內存的大?。?/p>
第四列,shared 是共享內存的大?。?/p>
第五列,buffers 是緩存的大小;
第六列,cache是緩沖區(qū)的大?。?/p>
最后一列,available 是新進程可用內存的大小。
那么buffers/cached又是什么意思呢?
Buffer,是指buffer cache,是緩沖區(qū)用到的內存,是對block設備的數據緩沖,用來存儲磁盤數據,對應的是 /proc/meminfo 中的 Buffers 值。
Cache,是指page cache,是頁緩存和 Slab 用到的內存,從磁盤讀取文件的頁緩存,用來緩存從文件讀取的數據。對應的是 /proc/meminfo 中的 Cached 與 SReclaimable 之和。
我們也經常使用ps和top來獲取內存數據和進程的內存性能數據。top命令中VIRT、RES、SHR和%MEM的含義
VIRT 是進程虛擬內存的大小。只要是進程申請過的內存,即便還沒有真正分配物理內存,也會計算在內。
RES 是已分配使用的物理內存的大小,但不包括 Swap 和共享內存。
SHR 是共享內存的大小,比如與其他進程共同使用的共享內存、加載的動態(tài)鏈接庫以及程序的代碼段等。
%MEM 是進程使用物理內存占系統總內存的百分比。
那么如何獲取一個進程內存使用情況呢,linux通過proc文件系統為每個進程的內存信息都記錄在/proc//smaps文件中。在smaps文件中,每一條記錄(如下圖2所示)表示進程虛擬內存空間中一塊連續(xù)的區(qū)域。文件解讀如下:
希望以上能夠對Linux內存的指標有更清晰的了解,對度量和分析系統內存,業(yè)務/進程使用內存進行進一步更深入的分析。