首頁 > 軟體

Linux下檢視記憶體的使用情況

2020-06-16 17:25:34

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


IT145.com E-mail:sddin#qq.com