Linux查看CPU使用率、內存使用率等

一、CPU使用率查看

1. cat /proc/loadavg命令

$ cat /proc/loadavg
0.08 0.06 0.10 1/442 8347

前三項分別是最近1分鐘、5分鐘和15分鐘的系統平均負載。系統平均負載爲在特定時間間隔內運行隊列中的平均進程數,包括正在CPU上運行或者等待運行的進程。

第四項,分子是正在運行的進程數,分母是進程總數。

最後一項是最近運行的進程ID號。 

2. top命令

$ top
top - 10:00:34 up 193 days, 15 min,  2 users,  load average: 0.03, 0.05, 0.10
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.8 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32946324 total, 10400992 free,  2478008 used, 20067324 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 28319396 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                        
root      20   0 1230476  46344  15688 S   6.7  0.1 626:31.26 containerd                                                                                     
root      20   0   51768   3836   2416 S   0.0  0.0 116:33.67 systemd                                                                                        
root      20   0       0      0      0 S   0.0  0.0   0:07.89 kthreadd                                                                                       
root      20   0       0      0      0 S   0.0  0.0   0:13.71 ksoftirqd/0                                                                                    
root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                                   
root      rt   0       0      0      0 S   0.0  0.0   0:15.24 migration/0                                                                                    
root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                                                         
root      20   0       0      0      0 S   0.0  0.0 200:13.21 rcu_sched                                                                                      
root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain

與CPU使用情況相關的主要是前三行,顯示的是整個系統的cpu使用狀況。另外,%MEM列實時顯示了每個進程的CPU使用率

第一行是基本情況,分別是:當前時間,系統運行時長,當前登錄用戶數,系統平均負載(同cat /proc/loadavg命令前三個值)

第二行是進程狀況,分別是:進程總數,正在運行的進程數,睡眠的進程數,停止的進程數,殭屍進程數。

第三行是CPU使用信息,分別是:用戶空間佔用CPU時間百分比,內核空間佔用CPU時間百分比,用戶進程空間內改變過優先級的進程佔用CPU時間百分比,空閒CPU時間百分比,等待輸入輸出的CPU時間百分比,CPU服務於硬件中斷的CPU時間百分比,CPU服務於軟件中斷的CPU時間百分比,被虛擬機偷走的CPU時間百分比。

3.vmstat命令

vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率, 內存使用, 虛擬內存,交換情況,IO讀寫情況。

相比top,通過vmstat可以看到整個機器的 CPU,內存,IO的使用情況, 而不是單單看到各個進程的CPU使用率和內存使用率。

vmstat如何運行 

兩個數字參數來完成的
第一個參數: 採樣的時間間隔數,單位是秒,
第二個參數: 採樣的次數
# vmstat 2 12
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 835920  80296 642904    0    0     1     1   14   69  0  0 100  0  0
 0  0      0 835920  80296 642936    0    0     0     0  216  304  1  1 99  0  0
 0  0      0 835920  80296 642936    0    0     0     0  208  313  0  1 99  0  0
 0  0      0 835920  80300 642936    0    0     0     8  186  292  0  0 99  1  0
 0  0      0 835920  80300 642936    0    0     0     0  115  274  0  0 99  0  0
 0  0      0 835920  80300 642936    0    0     0     0  115  278  0  0 100  0  0
 0  0      0 835920  80300 642936    0    0     0     0  115  280  1  0 100  0  0
 0  0      0 835920  80300 642936    0    0     0     0  117  284  0  1 99  0  0
 0  0      0 835920  80300 642936    0    0     0     0  113  276  0  0 100  0  0
 0  0      0 835920  80300 642936    0    0     0     0  114  281  0  1 100  0  0
 0  0      0 835920  80300 642936    0    0     0     0  119  285  1  0 99  0  0
 0  0      0 835920  80300 642936    0    0     0     0  111  274  0  0 100  0  0

如果不需要加上監控時間的話, 那麼就意味着每2秒監測,直到程序的結束:

#vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0 836068  80304 642936    0    0     1     1   14   69  0  0 100  0  0
 0  0      0 836044  80304 642936    0    0     0     0  228  324  0  0 100  0  0
 0  0      0 836044  80304 642936    0    0     0     0  233  334  1  1 99  0  0
... ...

參數詳解

Linux 內存監控vmstat命令輸出分成六個部分:

(1)進程procs

r:在運行隊列中等待的進程數
b:在等待io的進程數

常見情況:

假如 r 經常大於4 ,且 id 經常小於40,表示中央處理器的負荷很重。

假如 bi,bo 長期不等於0,表示物理內存容量太小。

參數含義:

r:表示運行隊列(就是說多少個進程真的分配到CPU),當前測試的服務器目前CPU比較空閒,沒什麼程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸 了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊 列。如果運行隊列過大,表示CPU很繁忙,一般會造成CPU使用率很高。
b:表示阻塞的進程。

(2)內存memoy

swpd:現時可用的交換內存(單位KB)
free:空閒的內存(單位KB)
buff: 緩衝去中的內存數(單位:KB)
cache:被用來做爲高速緩存的內存數(單位:KB)

swpd:虛擬內存已使用的大小,如果大於0,表示機器物理內存不足了, 如果不是程序內存泄露的原因, 那麼應該升級內存了或者把耗內存的任務遷移到其他機器。

free: 空閒的物理內存的大小,當前顯示的機器內存總共8G,剩餘3415M。

buff:Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存,本機大概佔用300多M。

cache:cache直接用來記憶打開過的文件,給文件做緩衝, 這裏本機大概佔用300多M (這裏是Linux/Unix的聰明之處,把空閒的物理內存的一部分拿來做文件和目錄的緩存, 是爲了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)

(3)swap交換頁面

si: 從磁盤交換到內存的交換頁數量,單位:KB/秒
so: 從內存交換到磁盤的交換頁數量,單位:KB/秒

si:每秒從磁盤讀入虛擬內存的大小,如果這個值大於0, 表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。 

so: 每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。

(4)io塊設備

bi: 發送到塊設備的塊數,單位:塊/秒
bo: 從塊設備接收到的塊數,單位:塊/秒

bi:塊設備每秒接收的塊數量,這裏的塊設備是指系統上所有的磁盤和其他塊設備, 默認塊大小是1024byte,此時本機上沒什麼IO操作,所以一直是0, 但是曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s, 磁盤寫入速度差不多140M每秒

bo: 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。 bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

(5)system系統

in: 每秒的中斷數,包括時鐘中斷
cs: 每秒的環境(上下文)轉換次數

in:每秒CPU的中斷次數,包括時間中斷

cs: 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的 數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程可以由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁調用系統函數。上下文切換次數過多表示CPU大部分浪費在上下文切換,導致CPU幹正經事的 時間少了,CPU沒有充分利用,是不可取的。

(6)cpu中央處理器

us:用戶進程使用的時間,以百分比表示
sy:系統進程使用的時間,以百分比表示
id:中央處理器的空閒時間,以百分比表示
wa:CPU 空閒時間,在此期間系統有未完成的磁盤/NFS I/O 請求
st:來自於虛擬機偷取的CPU所佔的百分比

us:用戶CPU時間,曾經在一個做加密解密很頻繁的服務器上, 可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。

sy:系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。

id:空閒 CPU時間,一般來說,id + us + sy = 100,一般我認爲id是空閒CPU使用率, us是用戶CPU使用率,sy是系統CPU使用率。

4. sar命令

sar命令語法和vmstat一樣。命令不存在時需要安裝sysstat包,這個包很有用。

輸出CPU使用率的統計信息

sar 10 3    //每10秒採樣一次,連續採樣3次
sar -u 10 3  //同上
sar       //輸出全天cpu使用率的統計信息
sar -p     //同上
sar -P ALL 2 3  //每2秒採樣一次,連續採樣3次,輸出CPU每個核心的使用率

例如每1秒採集一次CPU使用率,共採集5次。

# sar -u 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)

04:56:03 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:56:04 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:05 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:06 PM     all      0.99      0.00      0.99      0.00      0.00     98.02
04:56:07 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.20      0.00      0.20      0.00      0.00     99.60

和top一樣,可以看到所有cpu的使用情況。如果需要查看某顆cpu的使用可以用-P參數。例如指定顯示0號cpu 的使用情況。

# sar -P 0 -u 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)

04:39:13 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:39:14 PM       0      0.00      0.00      0.99      0.00      0.00     99.01
04:39:15 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
04:39:16 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
04:39:17 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
04:39:18 PM       0      1.00      0.00      0.00      0.00      0.00     99.00
Average:          0      0.20      0.00      0.20      0.00      0.00     99.60

 進程隊列長度和平均負載狀態,例如每1秒採集一次,共採集5次。

# sar -q 1 5  
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)

04:40:14 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
04:40:15 PM         0       149      0.00      0.01      0.05         0
04:40:16 PM         0       149      0.00      0.01      0.05         0
04:40:17 PM         0       149      0.00      0.01      0.05         0
04:40:18 PM         1       149      0.00      0.01      0.05         0
04:40:19 PM         1       149      0.00      0.01      0.05         0
Average:            0       149      0.00      0.01      0.05         0

輸出項:

runq-sz:運行隊列的長度(等待運行的進程數)
plist-sz:進程列表中進程(processes)和線程(threads)的數量
ldavg-1:最後1分鐘的系統平均負載(System load average)
ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載

創建的平均值和上下文切換的次數,例如每1秒收集一次,共收集5次。

# sar -w 1 5 
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)

04:41:39 PM    proc/s   cswch/s
04:41:40 PM      0.00    274.26
04:41:41 PM      0.00    277.78
04:41:42 PM      0.00    285.00
04:41:43 PM      0.00    280.00
04:41:44 PM      0.00    270.00
Average:         0.00    277.40

sar命令也可以獲取過去指定日期的性能參數。

# sar -u -f /var/log/sa/sa08
Linux 3.10.0-693.2.2.el7.x86_64 (localhost.localdomain)         04/08/2019      _x86_64_        (1 CPU)

10:54:35 AM       LINUX RESTART

11:00:02 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:10:01 AM     all     12.93      0.23      2.89      1.54      0.00     82.41
11:20:01 AM     all     46.58      0.00      8.81      0.79      0.00     43.82
11:30:01 AM     all     44.93      0.00      9.68      0.15      0.00     45.24
11:40:02 AM     all      0.25      0.00      0.15      0.00      0.00     99.60
11:50:01 AM     all      0.19      0.00      0.13      0.00      0.00     99.68
12:00:01 PM     all      0.31      0.00      0.19      0.14      0.00     99.37

5. mpstat

mpstat是MultiProcessor Statistics的縮寫,是一個實時系統監控工具,輸出CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPU系統裏,其不但能查看所有CPU的平均統計信息,而且能夠查看特定CPU的信息

顯示所有CPU整體(平均)使用狀況:

# mpstat        //不帶參數時,輸出爲從系統啓動以來的平均值
Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)

03:14:40 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:14:40 PM  all    1.59    0.05    0.74    0.05    0.00    0.04    0.03    0.00   97.51

# mpstat 1 5    //每1秒收集一次,共5次
Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)

03:25:58 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:25:59 PM  all    0.13    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.62
03:26:00 PM  all    0.38    0.00    0.38    0.00    0.00    0.13    0.00    0.00   99.12
03:26:01 PM  all    2.01    0.00    1.01    0.00    0.00    0.00    0.13    0.00   96.86
03:26:02 PM  all    0.38    0.00    0.38    0.00    0.00    0.00    0.00    0.00   99.25
03:26:03 PM  all    0.25    0.00    0.25    0.00    0.00    0.13    0.00    0.00   99.37
Average:     all    0.63    0.00    0.45    0.00    0.00    0.05    0.03    0.00   98.85

顯示所有CPU的使用狀況:

# mpstat -P ALL 10 20  //每10秒收集一次數據,共20次
Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)

03:12:59 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:13:09 PM  all    0.41    0.00    0.34    0.03    0.00    0.05    0.04    0.00   99.13
03:13:09 PM    0    1.01    0.00    0.70    0.20    0.00    0.00    0.00    0.00   98.09
03:13:09 PM    1    1.21    0.00    0.71    0.00    0.00    0.40    0.20    0.00   97.47
03:13:09 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
03:13:09 PM    3    0.10    0.00    0.30    0.00    0.00    0.00    0.00    0.00   99.60
03:13:09 PM    4    0.30    0.00    0.30    0.00    0.00    0.00    0.00    0.00   99.40
03:13:09 PM    5    0.50    0.00    0.40    0.00    0.00    0.00    0.00    0.00   99.10
03:13:09 PM    6    0.10    0.00    0.10    0.00    0.00    0.00    0.00    0.00   99.80
03:13:09 PM    7    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.80
....

輸出項說明:

%usr:表示處理用戶進程所使用CPU的百分比
%nice:表示使用nice命令對進程進行降級時CPU的百分比
%sys:表示內核進程使用的CPU百分比
%iowait:表示等待進行I/O所使用的CPU時間百分比
%irq:表示用於處理系統中斷的CPU百分比
%soft:表示用於軟件中斷的CPU百分比
%steal:顯示虛擬機管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比
%guest:顯示運行虛擬處理器時CPU花費時間的百分比
%idle:顯示CPU的空閒時間百分比

6. iostat

這個命令主要用來查看io使用情況,也可以來查看cpu,不常用。

# iostat -c 1 2
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.26    0.00    0.21    0.01    0.00   99.53

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

7. dstat

每秒cpu使用率情況獲取

#  dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
  0   0 100   0   0   0
  0   1  99   0   0   0
  1   0  99   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  1   1  98   0   0   0
  0   0 100   0   0   0

最佔cpu的進程獲取

# dstat --top-cpu  
-most-expensive-
  cpu process   
AliYunDun    0.2
AliYunDun    2.0
mysqld       1.0
AliYunDun    1.0
kworker/0:1H 1.0
AliYunDun    1.0
AliYunDun    1.0
AliYunDun    1.0

8. uptime命令

uptime命令是一個簡單的獲取系統總共運行時長,以及最近1分鐘、5分鐘、15分鐘的平均負載的工具。uptime命令輸出內容與top命令輸出首行內容一樣,不再贅述。

# uptime
 15:40:19 up 203 days, 23:15,  2 users,  load average: 0.01, 0.01, 0.00

9. pidstat命令

pidstat命令主要用於監控全部或指定進程佔用系統資源的情況。

# pidstat
Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)

03:48:26 PM       PID    %usr %system  %guest    %CPU   CPU  Command
03:48:26 PM         1    0.00    0.01    0.00    0.01     5  init
03:48:26 PM         2    0.00    0.00    0.00    0.00     1  kthreadd
03:48:26 PM         3    0.00    0.00    0.00    0.00     0  migration/0
03:48:26 PM         4    0.00    0.00    0.00    0.00     0  ksoftirqd/0
03:48:26 PM         6    0.00    0.00    0.00    0.00     0  watchdog/0
03:48:26 PM         7    0.00    0.00    0.00    0.00     1  migration/1
....

10. ps ux命令

ps ux 命令列出的是當前服務器的所有進程狀態信息,其中包括了各個進程的cpu使用率。

# ps ux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  19364  1632 ?        Ss    2019  18:20 /sbin/init
root          2  0.0  0.0      0     0 ?        S     2019   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S     2019   0:46 [migration/0]
root          4  0.0  0.0      0     0 ?        S     2019   3:13 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S     2019   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S     2019   0:39 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S     2019   0:35 [migration/1]
....

二、查看內存使用率

1. top命令

內存使用率: used/ total

2. free命令

free命令可以顯示Linux系統中空閒的、已用的物理內存及swap內存,及被內核使用的buffer。在Linux系統監控的工具中,free命令是最經常使用的命令之一。

free [參數]

free 命令顯示系統使用和空閒的內存情況,包括物理內存、交互區內存(swap)和內核緩衝區內存。共享內存將被忽略

參數:

-b  以Byte爲單位顯示內存使用情況。 

-k  以KB爲單位顯示內存使用情況。 

-m  以MB爲單位顯示內存使用情況。

-g   以GB爲單位顯示內存使用情況。 

-o  不顯示緩衝區調節列。 

-s<間隔秒數>  持續觀察內存使用狀況。 

-t  顯示內存總和列。 

-V  顯示版本信息。

使用示例:

free [-k] # 以 kb  爲單位顯示內存使用狀況
free -g # 以 G 爲單位顯示內存使用狀況
free -m # 以 M 爲單位顯示內存使用狀況
free -t  # 以總和的形式顯示內存的使用信息
free -s 1 # 每一秒顯示內存使用情況

實際輸出: 

# free
              total        used        free      shared  buff/cache   available
Mem:        1882232      331760      811004         592      739468     1384944
Swap:             0           0           0

解釋:

total:總計物理內存的大小。

used:已使用多大。

free:可用有多少。

Shared:多個進程共享的內存總額。

Buff/cache:磁盤緩存的大小。

查看額定值:

cat /proc/meminfo 
# cat /proc/meminfo
MemTotal:        1882232 kB
MemFree:          811244 kB
MemAvailable:    1385300 kB
Buffers:           81268 kB
Cached:           602500 kB
SwapCached:            0 kB
Active:           601948 kB
Inactive:         379880 kB
Active(anon):     298392 kB
Inactive(anon):      256 kB
Active(file):     303556 kB
Inactive(file):   379624 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               320 kB
Writeback:             0 kB
AnonPages:        298052 kB
Mapped:            47236 kB
Shmem:               592 kB
Slab:              55772 kB
SReclaimable:      44076 kB
SUnreclaim:        11696 kB
KernelStack:        2384 kB
PageTables:         5808 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      941116 kB
Committed_AS:     810896 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       10604 kB
VmallocChunk:   34359719676 kB
HardwareCorrupted:     0 kB
AnonHugePages:    237568 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63360 kB
DirectMap2M:     2033664 kB
DirectMap1G:           0 kB

那buffers和cached都是緩存,兩者有什麼區別呢?

        爲了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。

        前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。磁盤的操作有邏輯級(文件系統)和物理級(磁盤塊),這兩種Cache就是分別緩存邏輯和物理級數據的。Page cache實際上是針對文件系統的,是文件的緩存,在文件層面上的數據會緩存到page cache。文件的邏輯層需要映射到實際的物理磁盤,這種映射關係由文件系統來完成。當page cache的數據需要刷新時,page cache中的數據交給buffer cache,因爲Buffer Cache就是緩存磁盤塊的。但是這種處理在2.6版本的內核之後就變的很簡單了,沒有真正意義上的cache操作。

        Buffer cache是針對磁盤塊的緩存,也就是在沒有文件系統的情況下,直接對磁盤進行操作的數據會緩存到buffer cache中,例如,文件系統的元數據都會緩存到buffer cache中。簡單說來,page cache用來緩存文件數據,buffer cache用來緩存磁盤數據。在有文件系統的情況下,對文件操作,那麼數據會緩存到page cache,如果直接採用dd等工具對磁盤進行讀寫,那麼數據會緩存到buffer cache。所以我們看linux,只要不用swap的交換空間,就不用擔心自己的內存太少.如果常常swap用很多,可能你就要考慮加物理內存了.這也是linux看內存是否夠用的標準.

       如果是應用服務器的話,一般只看第二行,+buffers/cache,即對應用程序來說free的內存太少了,也是該考慮優化程序或加內存了。

以總和的形式顯示內存的使用信息

free -t 
# free -t
              total        used        free      shared  buff/cache   available
Mem:        1882232      331760      811004         592      739468     1384948
Swap:             0           0           0
Total:      1882232      331760      811004

週期性的查詢內存使用信息

free -s 10
# free -s 10
              total        used        free      shared  buff/cache   available
Mem:        1882232      324924      816688         496      740620     1392280
Swap:             0           0           0

              total        used        free      shared  buff/cache   available
Mem:        1882232      324944      816664         496      740624     1392260
Swap:             0           0           0

三、查看磁盤使用率

# df

磁盤使用率=(Used列數據之和)/(1k-blocks列數據之和)

磁盤和內存的區別與聯繫:

(磁盤--也叫硬盤--或是U盤--或是移動硬盤):

(1)硬盤與內存都是存儲器,一個是內部,一個是外部。

(2)硬盤與內存的區別是很大的,這裏只談最主要的三點:

         a. 內存是計算機的工作場所,硬盤用來存放暫時不用的信息;

         b. 內存是半導體材料製作,硬盤是磁性材料製作;

         c. 內存中的信息會隨掉電而丟失,硬盤中的信息可以長久保存。

(3)內存與硬盤的聯繫也非常密切:
        硬盤上的信息永遠是暫時不用的,要用請裝入內存!
        CPU與硬盤不發生直接的數據交換,CPU只是通過控制信號指揮硬盤工作,硬盤上的信息只有在裝入內存後才能被處理。

(4)計算機的啓動過程就是一個從硬盤上把最常用信息裝入內存的過程。

(5)硬盤則決定你的電腦可以裝下多少東西,內存則決定你的電腦開機後一次最多可以運行多少程序(如手機運行內存)。
 

參考博客:https://www.cnblogs.com/leaves1024/p/12143968.html

參考博客:https://blog.csdn.net/wujizhishui/article/details/89333957

參考博客:https://blog.csdn.net/wujizhishui/article/details/89333991

參考博客:https://www.linuxidc.com/Linux/2016-12/138598.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章