系統平均負載
是指處於運行或不可打擾狀態的進程的平均數。處於運行,表示運行態,占用CPU,或就緒態,等待CPU調度;不可打擾,表示阻塞,正在等待I/O。
linux系統中查看負載情況一般使用uptime命令(w命令和top命令)
一、uptime命令
# uptime
14:07:35 up 112 days, 20:54, 1 user, load average: 0.00, 0.01, 0.05
內容解析:
- 14:07:35 : 當前時間
- up 112 days, 20:54 :系統運行時長
- 1 user :當前有1個用戶登錄了系統
- load average: 0.00, 0.01, 0.05 :系統在過去的1分鍾內,5分鍾內,15分鍾內的平均負載
平均負載解析
查看邏輯CPU核心數: grep 'model name' /proc/cpuinfo | wc -l
# grep 'model name' /proc/cpuinfo | wc -l
1
運行結果表示,有1個邏輯CPU核心。 以1個CPU核心為例,假設CPU每分鍾最多處理100個進程 --
- load = 0,沒有進程需要CPU
- load = 0.5,CPU處理了50個進程
- load = 1,CPU處理了100個進程,這是CPU已被占滿,但系統還是能順暢運行
- load = 1.5,CPU處理了100個進程,還有50個進程正在排隊等着CPU處理,這是CPU已經超負荷工作了。
為了讓系統順暢運行,load值最好不要超過1.0,這樣就沒有進程需要等待了,所有進程都能在第一時間得到處理。
一般情況下,0.7是一個比較理想的值。
另外,load值的健康狀態還跟系統CPU核心數相關,如果CPU核心數為2,那么load健康值應該為2,依次類推。
評價系統的負載一般采用15分鍾內的那個平均負載值。
二、w命令
[root@localhost ~]# w
14:35:48 up 112 days, 21:22, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.4.2.107 14:06 4.00s 0.02s 0.01s w
第1行:與uptime命令相同
第2行以下:當前登錄的用戶列表
三、top命令
[root@localhost ~]# top
top - 14:40:59 up 112 days, 21:27, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 98 total, 1 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880604 total, 753448 free, 301416 used, 2825740 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3249396 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5074 root 20 0 161884 2184 1544 R 0.3 0.1 0:00.02 top
1 root 20 0 128004 5548 3116 S 0.0 0.1 29:47.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.98 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 1:02.55 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
第1行:與uptime命令相同
第2行:進程數信息
- Tasks: 98 total 總共有98個進程
- 1 running 1個進程正在占用CPU
- 97 sleeping 97個睡眠進程
- 0 stopped 0個停止的進程
- 0 zombie 0個僵屍進程
第3行:CPU使用率 - us(user) 非nice用戶占用的CPU
- sy(system) 內核、內核進程占用CPU的比率
- ni(nice) 用戶進程空間內改變過優先級的進程占用的CPU比率
- id(idle) CPU空閑比率,如果系統緩慢而這個值很高,說明系統慢的原因不是CPU負載高
- wa(iowait) CPU等待執行I/O操作的時間比率,該指標可以用來排查磁盤I/O的問題,通常結合wa和id判斷
- hi(Hardware IRQ) CPU處理硬件中斷所占時間的比率
- si(Software Interrupts) CPU處理軟件中斷所占時間的比率
- st(steal) 流逝的時間,虛擬機中的其他任務所占CPU時間的比率
一些情形說明:
- 用戶進程us占比高,I/O操作wa低: 說明系統緩慢的原因在於進程占用大量CPU,通常還會伴有較低的空閑占比id,說明CPU空轉時間很少。
- I/O操作wa低,空閑比率id高: 可以排除CPU資源瓶頸的可能。
- I/O操作wa高:說明I/O占用了大量的CPU時間,需要檢查交換空間的使用,交換空間位於磁盤上,性能遠低於內存,當內存耗盡開始使用交換空間時,將會給性能帶來嚴重的影響,所以對於性能要求較高的服務器,一般建議關閉交換空間。另一方面,如果內存充足,但wa很高,說明需要檢查哪個進程占用了大量的I/O資源。
四、iostat命令
iostat 命令可以查看系統區分的I/O使用情況。
[root@localhost ~]# iostat
-bash: iostat: command not found
[root@localhost ~]# yum install -y sysstat
...安裝過程
[root@localhost ~]# iostat
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.09 0.00 0.00 99.90
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.04 7.27 2.76 70737928 26794216
dm-0 0.02 0.06 0.25 610596 2392246
dm-1 0.00 0.00 0.00 2604 0
dm-2 0.02 7.21 2.51 70107584 24386816
avg-cpu:
%user 在用戶級別運行所使用的CPU比率
%nice nice操作所使用的CPU比率
%system 在系統級別(kernel)運行所使用的CPU比率
%iowait CPU等待硬件I/O時,所占用的CPU比率
%steal 其他任務所占CPU時間的比率
%idle CPU空閑時間的比率
值得注意的IO指標:
Device 磁盤名稱
tps 每秒I/O傳輸請求量
kB_read/s 每秒讀取的block數
kB_wrtn/s 每秒寫入的block數
kB_read 讀取block的總數
kB_wrtn 寫入block的總數
五、iotop命令
iotop命令類似top命令,但是現實的是各個進程的I/O情況,對於定位I/O操作較重的進程有較大的作用。
[root@localhost ~]# yum install -y iotop
[root@localhost ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
1027 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % sshd -D
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
可以看到不同任務的讀寫強度。
六、sysstat工具
查看歷史監控數據可以使用sysstat工具的sar命令:可以記錄系統CPU的負載,I/O狀況和內存使用記錄。
sysstat的配置文件在: /etc/sysconfig/sysstat
sysstat的日志文件在: /var/log/sa/ 統計信息每10分鍾記錄一次,每天的23:59分會分割統計文件。該操作在/etc/cron.d/sysstat 文件中配置。
sar -u 查看當天CPU使用情況
sar -r 查看當天內存使用情況
sar -b 查看當天IO統計記錄
[root@localhost ~]# yum install -y sysstat
[root@localhost ~]# sar
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
03:40:01 PM CPU %user %nice %system %iowait %steal %idle
03:50:01 PM all 0.00 0.00 0.04 0.00 0.00 99.96
...
Average: all 0.02 0.00 0.05 0.00 0.00 99.93
[root@localhost ~]# sar -r
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
03:40:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
03:50:01 PM 743604 3137000 80.84 100 2677828 878216 14.69 507828 2406620 0
04:00:01 PM 743548 3137056 80.84 100 2677836 878216 14.69 507836 2406620 0
...
Average: 742369 3138235 80.87 100 2678556 878239 14.69 508025 2407157 0
kbmemfree 這個值和free命令中的free值基本一致,所以它不包括buffer和cache的空間
kbmemused 這個值和free命令中的used值基本一致,所以它包括buffer和cache的空間
%memused 這個值是kbmemused和內存總量(不包括swap)的一個百分比
kbbuffers 這個值是free命令中的buffer
kbcached 這個值是free命令中的cache
kbcommit 保證當前系統所需要的內存,即為了確保不溢出而需要的內存(RAM+swap)
%commit 這個值是kbcommit與內存總量(包括swap)的一個百分比
[root@localhost ~]# sar -b
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
03:40:01 PM tps rtps wtps bread/s bwrtn/s
03:50:01 PM 0.08 0.01 0.07 1.30 0.71
04:00:01 PM 0.06 0.00 0.06 0.00 0.49
...
Average: 0.12 0.00 0.12 0.85 1.79
tps 每秒鍾物理設備的 I/O 傳輸總量
rtps 每秒鍾從物理設備讀入的數據總量
wtps 每秒鍾向物理設備寫入的數據總量
bread/s 每秒鍾從物理設備讀入的數據量,單位為:塊/s
bwrtn/s 每秒鍾向物理設備寫入的數據量,單位為:塊/s