本隨筆介紹CPU負載的排查手段。mysql
查看系統負載的工具:uptime,w,都能查看系統負載,系統平均負載是處於運行或不可打擾狀態的進程的平均數,ios
例1. 使用uptime查看系統負載sql
# uptime 19:26:17 up 49 days, 7:34, 1 user, load average: 0.67, 0.51, 0.41
這裏咱們關注的是最後三列,即系統1分鐘、5分鐘、15分鐘內的平均負載,判斷一個系統負載是否偏高須要計算單核CPU的平均負載,等於這裏uptime命令顯示的系統平均負載 / CPU核數,通常以0.7爲比較合適的值。偏高說明有比較多的進程在等待使用CPU資源。api
例2. 使用w查看系統負載服務器
1 # w 2 19:29:47 up 49 days, 7:38, 1 user, load average: 0.42, 0.46, 0.41 3 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT 4 openstac pts/1 10.14.16.25 19:21 1.00s 0.19s 0.03s sshd: openstack [priv]
使用 w 命令也能夠查看相似的信息,w 命令還提供了當前登陸用戶,以及正在執行的操做等信息。ssh
系統負載能夠是CPU密集型的,也能夠是RAM密集型和I/O密集型的,CPU密集型的系統比I/O密集型的系統響應度更好,由於I/O密集型的系統的磁盤I/O可能徹底飽和,致使登陸就很費事。工具
2. top命令性能
top命令不只能夠查看當前系統的平均負載,還能夠查看不一樣進程對於CPU、內存等資源的使用狀況,在內存排障部分咱們也將介紹top命令。spa
例3. 使用top命令查看CPU使用率日誌
top - 19:36:00 up 49 days, 7:44, 1 user, load average: 0.34, 0.38, 0.40 Tasks: 216 total, 3 running, 213 sleeping, 0 stopped, 0 zombie %Cpu(s): 4.0 us, 6.1 sy, 0.0 ni, 88.0 id, 1.5 wa, 0.0 hi, 0.4 si, 0.0 st KiB Mem: 12260128 total, 6160704 used, 6099424 free, 331448 buffers KiB Swap: 0 total, 0 used, 0 free. 1393220 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3460 ntp 20 0 33508 2180 1536 S 47.2 0.0 5765:44 ntpd 12781 ceilome+ 20 0 137464 60096 4740 S 5.0 0.5 833:30.17 ceilometer-agen 2816 rabbitmq 20 0 2482652 274620 2612 S 1.7 2.2 1222:49 beam.smp 1501 mysql 20 0 655848 310788 9928 S 1.0 2.5 368:28.78 mysqld 2781 nova 20 0 355508 104096 3944 S 1.0 0.8 284:42.22 nova-conductor 410 root 39 19 0 0 0 S 0.7 0.0 409:22.74 kipmi0 2782 nova 20 0 356304 105000 3936 S 0.7 0.9 249:34.72 nova-conductor 19305 glance 20 0 182964 88608 4800 S 0.7 0.7 461:00.03 glance-api
例3給出了一個top命令的截圖示意,默認狀況下,top命令是以CPU使用率由高到低排序顯示進程信息的,在 top 信息界面按 K 鍵,並輸入想要終止的PID,就能夠直接殺死指定進程。
top的 -b 選項開啓批處理模式,將每次刷新所有打印到stdout
top的 -n 選項指定退出top命令前刷新多少次信息。
top命令的輸出:
第1行:與uptime相同;
第3行:當前的CPU運行狀況:
us:非nice用戶進程佔用CPU的比率
sy:內核、內核進程佔用CPU的比率;
ni:若是一些用戶進程修改過優先級,這裏顯示這些進程佔用CPU時間的比率;
id:CPU空閒比率,若是系統緩慢而這個值很高,說明系統慢的緣由不是CPU負載高;
wa:CPU等待執行I/O操做的時間比率,該指標能夠用來排查磁盤I/O的問題,一般結合wa和id判斷
hi:CPU處理硬件終端所佔時間的比率;
si:CPU處理軟件終端所佔時間的比率;
st:流逝的時間,虛擬機中的其餘任務所佔CPU時間的比率;
用戶進程佔比高,wa低,說明系統緩慢的緣由在於進程佔用大量CPU,一般還會伴有教低的id,說明CPU空轉時間不多;
wa低,id高,能夠排除CPU資源瓶頸的可能。
wa高,說明I/O佔用了大量的CPU時間,須要檢查交換空間的使用,交換空間位於磁盤上,性能遠低於內存,當內存耗盡開始使用交換空間時,將會給性能帶來嚴重影響,因此對於性能要求較高的服務器,通常建議關閉交換空間。另外一方面,若是內存充足,但wa很高,說明須要檢查哪一個進程佔用了大量的I/O資源。
3. iostat命令
iostat命令能夠查看系統分區的IO使用狀況
例4. iostat命令查看系統IO佔用
1 # iostat 2 Linux 3.13.0-55-generic (ISeR-Server1) 08/12/2015 _x86_64_ (4 CPU) 3 4 avg-cpu: %user %nice %system %iowait %steal %idle 5 4.62 0.02 2.20 0.55 0.00 92.60 6 7 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 8 sda 5.91 4.16 130.04 17735179 554343984
在第2行系統發行版本下面的第四、5行,能夠看到與top命令中CPU使用狀況相似的信息,
第7行,能夠看到一些IO指標:
tps: 每秒I/O傳輸請求量;
kB_read/s:每秒讀取多少KB;
kB_wrtn/s:每秒寫多少KB;
kB_read:一共讀了多少KB;
kB_wrtn:一共寫了多少KB。
iostat命令屬於sysstat工具包,因爲咱們的機器只掛載了一塊硬盤,所以不能體現不一樣設備的I/O區別。
4. iotop命令
iotop命令相似於top命令,可是顯示的是各個進程的I/O狀況,對於定位I/O操做較重的進程有比較大的做用。
例5. iotop命令與進程的IO情況
1 Total DISK READ : 0.00 B/s | Total DISK WRITE : 972.38 K/s 2 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 995.35 K/s 3 TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 4 1651 be/4 mysql 0.00 B/s 953.24 K/s 0.00 % 6.71 % mysqld 5 189 be/3 root 0.00 B/s 0.00 B/s 0.00 % 1.50 % [jbd2/sda2-8] 6 3492 be/4 mysql 0.00 B/s 7.66 K/s 0.00 % 0.80 % mysqld 7 3475 be/4 mysql 0.00 B/s 3.83 K/s 0.00 % 0.52 % mysqld 8 1539 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 0.30 % mysqld 9 2419 be/4 mysql 0.00 B/s 3.83 K/s 0.00 % 0.24 % mysqld 10 3085 be/4 mysql 0.00 B/s 3.83 K/s 0.00 % 0.22 % mysqld
這裏能夠看到不一樣任務的讀寫強度。
2、 sysstat工具與負載歷史回放
不少系統負載太高的時候咱們是沒法當即獲知或者當即解決的,當檢測到或者知道歷史的高負載情況時,可能須要回放歷史監控數據,這時 sar 命令就派上用場了,sar命令一樣來自sysstat工具包,能夠記錄系統的CPU負載、I/O情況和內存使用記錄,便於歷史數據的回放。
Ubuntu系統上,sysstat的配置文件在/etc/default/sysstat,sysstat默認關閉,經過將該文件中的ENABLED改成"true"啓用;歷史日誌的存放位置爲/var/log/sysstat
Red Hat系統上,sysstat的配置文件在/etc/sysconfig/sysstat文件,歷史日誌的存放位置爲/var/log/sa
兩種系統上,統計信息都是每10分鐘記錄一次,天天的23:59會分割統計文件,這些操做的頻率都在/etc/cron.d/sysstat文件配置。
1. sar命令查看CPU、內存和磁盤記錄
默認狀況下,sar命令顯示當天的統計信息,不帶參數顯示CPU統計信息,參數-r顯示收集的內存記錄,-b顯示磁盤I/O
例6. 使用sar命令查看當天CPU使用
1 # sar 2 Linux 3.13.0-55-generic (ISeR-Server1) 08/12/2015 _x86_64_ (4 CPU) 3 4 12:00:01 AM CPU %user %nice %system %iowait %steal %idle 5 12:05:01 AM all 3.83 0.02 4.24 0.61 0.00 91.30 6 12:15:01 AM all 3.57 0.02 4.28 0.58 0.00 91.54 7 12:25:01 AM all 3.83 0.02 5.16 0.60 0.00 90.39 8 12:35:01 AM all 3.98 0.02 5.66 0.58 0.00 89.76 9 12:45:01 AM all 3.86 0.02 5.26 0.59 0.00 90.28 10 12:55:01 AM all 3.77 0.02 5.19 0.60 0.00 90.42
例7. 使用sar命令查看當天內存使用
1 # sar -r 2 Linux 3.13.0-55-generic (ISeR-Server1) 08/12/2015 _x86_64_ (4 CPU) 3 4 12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 5 12:05:01 AM 6420736 5839392 47.63 242640 1366912 6811944 55.56 4324000 1202152 24 6 12:15:01 AM 6423128 5837000 47.61 242640 1367348 6830944 55.72 4320608 1202400 48 7 12:25:01 AM 6430984 5829144 47.55 242640 1367548 6814980 55.59 4314376 1202468 48 8 12:35:01 AM 6422924 5837204 47.61 242640 1367848 6817224 55.60 4321604 1202576 48 9 12:45:01 AM 6427300 5832828 47.58 242640 1368056 6822240 55.65 4318412 1202572 28
例8. 使用sar命令查看當天IO統計記錄
1 # sar -b 2 Linux 3.13.0-55-generic (ISeR-Server1) 08/12/2015 _x86_64_ (4 CPU) 3 4 12:00:01 AM tps rtps wtps bread/s bwrtn/s 5 12:05:01 AM 7.44 0.00 7.44 0.00 279.22 6 12:15:01 AM 6.45 0.00 6.45 0.00 255.84 7 12:25:01 AM 6.59 0.00 6.59 0.00 260.20 8 12:35:01 AM 6.51 0.00 6.51 0.00 261.42 9 12:45:01 AM 6.42 0.00 6.42 0.00 255.79
2. 使用sar查看指定時間、指定日期的歷史記錄
例9. 使用參數-s和-e限定查看的時間
1 # sar -s 20:00:00 2 Linux 3.13.0-55-generic (ISeR-Server1) 08/12/2015 _x86_64_ (4 CPU) 3 4 08:05:01 PM CPU %user %nice %system %iowait %steal %idle 5 08:15:01 PM all 3.98 0.02 6.07 0.58 0.00 89.34 6 08:25:01 PM all 4.32 0.02 5.74 0.58 0.00 89.34 7 Average: all 4.15 0.02 5.91 0.58 0.00 89.34
例9 只查看當天20:00:00後的CPU統計記錄
例10. 使用參數-f查看本月內以前某一天的歷史統計信息
1 # sar -f /var/log/sysstat/sa08 2 Linux 3.13.0-55-generic (ISeR-Server1) 08/08/2015 _x86_64_ (4 CPU) 3 4 12:00:01 AM CPU %user %nice %system %iowait %steal %idle 5 12:05:01 AM all 3.65 0.02 2.79 0.60 0.00 92.94 6 12:15:01 AM all 3.45 0.02 3.03 0.56 0.00 92.94 7 12:25:01 AM all 3.43 0.02 3.25 0.56 0.00 92.74 8 12:35:01 AM all 3.44 0.01 3.09 0.56 0.00 92.89 9 12:45:01 AM all 3.25 0.02 1.35 0.55 0.00 94.83 10 12:55:01 AM all 3.36 0.02 1.77 0.56 0.00 94.29
sysstat工具只存儲1個月內的系統使用記錄,天天的記錄以saN爲文件名保存在相應的日誌目錄中,這裏咱們查看本月8號的CPU使用記錄。