概述
-
CPU :關注使用率、運行隊列和上下文切換
排查方法 uptime -----> vmstat
-
內存:可用內存,swap佔用,頁面交換(Paging)
排查方法 vmstat
-
磁盤IO:%util ,IOPS,數據吞吐量
排查方法 : iostat ----> iotop
涉及linux 命令
- vmstat /uptime 一般系統自帶
- iostat # 安裝 yum install sysstat
- fio # 安裝 yum install libaio-devel fio
CPU:
一般判斷cpu 是不是存在性能瓶頸,可以通過
- uptime 查看性能負載(load average),如果系統持續處於高負載,(15分鐘平均負載 > 2 *CPU總核數)
- 通過 vmstat的r值和b值來確認是CPU負荷重還是等待I/O的進程太多
- ps : vmstat r 值需要結合id(空閒CPU)來看,所以如果你的id值不小於40的話CPU是不存在瓶頸的
- CPU使用率 = us + sy , 一般在80%以下
如果sy 一直 > 25% ,關注in(中斷)和cs(上下文切換)的數值
[root@VM_0_12_centos ~]# vmstat
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 68156 27976 508292 0 0 8 31 3 1 1 0 99 0 0
us:用戶佔用CPU的百分比
sy:系統(內核和中斷)佔用CPU的百分比
id:CPU空閒的百分比Procs
r: 運行進程的數量 (正在運行和等待運行)
b: 等待IO的進程數量 The number of processes in uninterruptible sleep.Memory
swpd: 使用的虛擬內存量
free: 可用內存大小.
buff: 用作緩衝區的內存量(buffers)
cache: 用作緩存的內存量 (cache).
inact: 不活動內存量. (-a option)
active: 活動的內存量. (-a option)Swap
si: 磁盤到內存 Amount of memory swapped in from disk (/s).
so: 內存到磁盤 Amount of memory swapped to disk (/s).IO
bi: 從塊設備接收的塊 Blocks received from a block device (blocks/s).
bo: 從塊發送到塊設備 Blocks sent to a block device (blocks/s).System
in: 每秒的中斷數,包括時鐘.
cs: 每秒的上下文的切換數CPU
百分比顯示
us: 用戶時間. (user time, including nice time)
sy: 系統(內核)時間. (system time)
id: cpu空閒時間百分比(包括了IO等待時間). Prior to Linux 2.5.41, this includes IO-wait time.
wa: 花費在io等待的時間. Prior to Linux 2.5.41, included in idle.
st: 從虛擬機竊取的時間. Prior to Linux 2.6.11, unknown.
cache(緩存) 和 buffer(緩衝) 簡單概述:
cache : 主要用於彌補 高速設備和低速設備之間速度不匹配問題,最終起到加快訪問速度的作用
buffer : 進行流量整形,把突發的大數量較小規模的 I/O 整理成平穩的小數量較大規模的 I/O,減少響應次數
Cache一般用於讀取數據,Buffer一般用於寫入數據
內存(可用內存,swap佔用,頁面交換(Paging)):
- 內存佔用應該小於物理內存的80%
- 頁面交換:si/so 值判斷
- swap佔用 :swpd來獲取當前SWAP空間的使用情況
- 當swpd不爲0,但si,so持續保持爲0時,內存資源並沒有成爲系統的瓶頸
磁盤IO
- 隨機IO:隨機讀寫數據,讀寫請求多,每次讀寫的數據量較小,其IO速度更依賴於磁盤每秒能IO次數(IOPS)。
- 順序IO:順序請求大量數據,讀寫請求個數相對較少,每次讀寫的數據量較大,順序IO更重視每次IO的數據吞吐
IOPS:每秒處理讀/寫請求的數量,即iostat輸出中的r/s和w/s,個人PC的機械硬盤IOPS一般在100左右
數據吞吐量:每秒讀/寫的數據大小,即iostat輸出中的rkB/s和wkB/s,通常磁盤的數據吞吐量與IO類型有直接關係,順序IO的吞吐能力明顯優與隨機讀寫,可以預先測得磁盤在隨機IO和順序IO下的吞吐量
iostat -x
Linux 3.10.0-514.26.2.el7.x86_64 (VM_0_12_centos) 10/28/2019 _x86_64_ (1 CPU)avg-cpu: %user %nice %system %iowait %steal %idle
0.60 0.00 0.48 0.22 0.00 98.69Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 2.92 0.62 4.25 7.99 30.74 15.90 0.06 12.07 4.34 13.20 0.65 0.32
scd0 0.00 0.00 0.00 0.00 0.00 0.00 64.78 0.00 0.45 0.45 0.00 0.33 0.00
svctm:平均每次設備I/O操作的服務時間 (毫秒)【警告! 不再信任此字段。 將來的sysstat版本中將刪除此字段。】
util:一秒中I/O 操作的利用率,或者說一秒中有多少時間 I/O 隊列是非空的。
>60% 很可能降低系統性能表現
IO測試工具:
fio 命令是專門測試 iops 的命令
如果發現IO 瓶頸 可以進一步通過iotop: 查看IO 負載具體是哪個進程