windows上有各種軟體可以進行“一鍵加速”之類的操作,釋放掉一些記憶體(雖然我暫時不知道是怎麼辦到的,有待後續學習)。而任務管理器也可以很方便地查看各進程使用的記憶體情況,如下圖: 同樣地,linux下也有一些方法來查看記憶體的使用情況。 一、free 對於free命令,可以加上-m參數,使其顯示單位 ...
windows上有各種軟體可以進行“一鍵加速”之類的操作,釋放掉一些記憶體(雖然我暫時不知道是怎麼辦到的,有待後續學習)。而任務管理器也可以很方便地查看各進程使用的記憶體情況,如下圖:
同樣地,linux下也有一些方法來查看記憶體的使用情況。
一、free
對於free命令,可以加上-m參數,使其顯示單位為Mb。如下:
[ccx@ubuntu ~]$>free total used free shared buffers cached Mem: 1008504 547364 461140 12836 53984 254508 -/+ buffers/cache: 238872 769632 Swap: 1046524 0 1046524
[ccx@ubuntu ~]$>free -m total used free shared buffers cached Mem: 984 534 450 12 52 248 -/+ buffers/cache: 233 751 Swap: 1021 0 1021
這裡出現了一些名詞,有些是我不知道的,我專門去查了一下它們所代表的含義。
total | used | free | shared | buffers | cached | |
Mem | 表示物理 記憶體總量 |
表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用 |
未被分配的記憶體 | 共用記憶體 | 系統分配但未被使用的buffers 數量 | 系統分配但未被使用的cache 數量 |
實際使用的buffers 與cache 總量,也是實際使用的記憶體總量 | 未被使用的buffers 與cache 和未被分配的記憶體之和,這就是系統當前實際可用記憶體 | |||||
Swap |
同樣是做為緩存,buffers和cache又有啥區別呢?
於是又查了些資料,發現buffers實際應該是叫“緩衝”,其英文解釋是:A buffer is something that has yet to be "written" to disk.
就是說,buffers是將要寫入硬碟中的數據緩存。
而cache的英文解釋:A cache is something that has been "read" from the disk and stored for later use.
就是說,cache是從硬碟或者存儲設備讀進電腦後緩存在記憶體中的數據。
想起看《電腦組成原理》的時候,有看到因特爾的cpu與記憶體之間有cache,這之間好像有什麼區別的樣子。
繼續查資料,發現了page cache 和 buffer cache。簡單說來,page cache用來緩存文件數據,buffer cache用來緩存磁碟數據。在有文件系統的情況下,對文件操作,那麼數據會緩存到page cache,如果直接採用dd等工具對磁碟進行讀寫,那麼數據會緩存到buffer cache。
對於cache和buffer,cached是cpu與記憶體間的,buffer是記憶體與磁碟間的,都是為瞭解決速度不對等的問題。
在free中,buffer 是buffer cache的記憶體,是塊設備的讀寫緩衝區;cache是page cache的記憶體, 文件系統的cache。
關於buffer與chche,這裡就不多說了,最後的鏈接5里講得挺清楚了。
這裡還有一個名詞,Swap,即虛擬記憶體。當物理記憶體不夠用的時候,就要釋放掉一部分空間,以供當前運行程式使用。這些被釋放掉的記憶體的數據就被臨時保存在虛擬記憶體中。但是,並非所有的數據都全被保存,只有那些使用malloc或new生成的對象,他們在文件中並沒有相應的“儲備”文件,被稱為匿名記憶體數據,需要臨時地存進Swap。故Swap又稱匿名數據交換空間。在鏈接3中有其說明。
至於shared,暫時沒查到與之相關的資料,只是在某鏈接里提了一下其不常用。
學習時參考的鏈接:
1、http://www.splaybow.com/post/linuxmemusage.html
2、http://ludihua.blog.51cto.com/4601284/1569816
3、http://www.cnblogs.com/my_life/articles/4629555.html
4、http://www.jb51.net/LINUXjishu/10945.html
5、http://www.cnblogs.com/chenpingzhao/p/5161844.html
二、top命令
top命令就好像是“linux下的任務管理器”:
其中,第一行的內容與uptime命令的結果是一樣的
[ccx@ubuntu ~]$>uptime 10:05:01 up 34 min, 1 user, load average: 0.00, 0.11, 0.16
第二行的名詞也比較好理解,就是進程總數與處於R、S、T、Z狀態下的進程數:
Tasks | total | running | sleeping | stopped | zombie |
總數 | 執行 | 等待(睡眠) | 暫停 | 僵屍 | |
181 | 2 | 179 | 0 | 0 |
第三行就是CPU的使用情況了,如下:
%Cpu(s) | |
us | 用戶空間占用CPU百分比 |
sy | 內核空間占用CPU百分比 |
ni | 用戶進程空間內改變過優先順序的進程占用CPU百分比 |
id | 空閑CPU百分比 |
wa | 等待輸入輸出的CPU時間百分比 |
hi | CPU服務於硬體中斷所耗費的時間總額 |
si | CPU服務軟中斷所耗費的時間總額 |
st | Steal Time |
第四、五行就是記憶體的使用情況了,和free命令里相似。
然後是列表的含義:
PID | 進程ID |
USER | 進程所有者 |
PR | 優先順序 |
NI | nice值,負值表示高優先順序,正值表示低優先順序 |
VIRT | 進程使用的虛擬記憶體總量 |
RES | 進程使用的、未被換出的物理記憶體大小 |
SHR | 共用記憶體大小 |
S | 進程狀態 |
%CPU | 上次更新到現在的CPU時間占用百分比 |
%MEM | 進程使用的物理記憶體百分比 |
TIME+ | 進程使用CPU總時間 |
COMMAND | 命令名、命令行 |
預設情況下只顯示這些比較重要的信息。在TOP界面下,按f可以修改顯示的內容。這個界面我並不是很懂,就不敘述了。
學習時參考的鏈接:
http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=1684&fromuid=34304
http://jingyan.baidu.com/article/4d58d5412917cb9dd4e9c0ed.html
三、vmstat命令
[ccx@ubuntu ~]$>vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 76 187932 154112 372228 0 0 143 32 36 90 1 1 94 3 0
具體參數如下表:
r | The number of processes waiting for run time. | 處於運行隊列中的內核線程數目(進程數)。 |
b | The number of processes in uninterruptible sleep. | 置於等待隊列(等待資源、等待輸入/輸出)的內核線程數目。 處於block隊列中不可中斷的進程數 |
swpd | the amount of virtual memory used. | 可用的虛擬交換記憶體 |
free | the amount of idle memory. | 空閑記憶體 |
buff | the amount of memory used as buffers. | 已用緩衝數目 |
cache | the amount of memory used as cache. | 已用緩存數目 |
si | Amount of memory swapped in from disk (/s). | 從磁碟到記憶體的交換頁數目 (單位/S) |
so | Amount of memory swapped to disk (/s). | 從交換記憶體到磁碟的交換頁數目(單位/S) |
bi | Blocks received from a block device (blocks/s). | 接收到塊設備的塊數(塊/秒) |
bo | Blocks sent to a block device (blocks/s). | 發送到塊設備的塊數(塊/秒) |
in | The number of interrupts per second, including the clock. | 每秒中斷數,包括時鐘中斷 |
cs | The number of context switches per second. | 每秒上下文切換數 |
us | Time spent running non-kernel code. (user time, including nice time) | 用戶時間,處於用戶模式的時間百分比 |
sy | Time spent running kernel code. (system time) | 系統時間,處於內核模式的時間百分比 |
id | Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time. | CPU空閑時間,空閑時間百分比 |
wa | Time spent waiting for IO. Prior to Linux 2.5.41, included in idle. | CPU 空閑時間,在此期間系統有未完成的磁碟/NFS I/O 請求 |
wt | Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown. | 來自於虛擬機偷取的CPU所占的百分比(這個不會翻譯...) |
學習時參考的鏈接:
http://blog.csdn.net/zhuying_linux/article/details/7336869
http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html