2021-05-12 14:32:11
Linux下檢視記憶體的使用情況
Linux下使用什麼方法來檢視記憶體的使用情況呢?我想監視Linux系統的記憶體使用情況,在Linux下有哪些檢視或者命令列工具可用呢?
在做Linux系統優化的時候,實體記憶體是其中最重要的一方面。自然的,Linux也提供了非常多的方法來監控寶貴的記憶體資源的使用情況。下面的清單詳細的列出了Linux系統下通過檢視工具或命令列來檢視記憶體使用情況的各種方法
一、free
對於free命令,可以加上-m引數,使其顯示單位為Mb。如下:
[linuxidc@Ubuntu ~]$>free total used free shared buffers cached Mem: 1008504 547364 461140 12836 53984 254508 -/+ buffers/cache: 238872 769632 Swap: 1046524 0 1046524
[linuxidc@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,暫時沒查到與之相關的資料,只是在某連結裡提了一下其不常用。
二、top命令
top命令就好像是“linux下的工作管理員”:
其中,第一行的內容與uptime命令的結果是一樣的
[linuxidc@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可以修改顯示的內容。這個介面我並不是很懂,就不敘述了。
三、vmstat命令
[linuxidc@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://www.linuxidc.com/Linux/2012-06/61771.htm
http://www.linuxidc.com/Linux/2014-06/102884.htm
http://www.linuxidc.com/Linux/2016-12/138598.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-12/138599.htm
相關文章