歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 萌新筆記——linux下查看內存的使用情況,linux

萌新筆記——linux下查看內存的使用情況,linux

日期:2017/3/3 18:00:01   编辑:學習Linux

萌新筆記——linux下查看內存的使用情況,linux

萌新筆記——linux下查看內存的使用情況,linux


  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

http://xxxxxx/Linuxjc/1181117.html TechArticle

Copyright © Linux教程網 All Rights Reserved