一、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