在使用過程中之前正常的功能,突然無法使用,性能變慢,通常都是資源消耗問題,資源消耗可以從以下幾個方面去排查。對於已經安裝硬件資源監控軟件(zabbix)的環境,直接使用硬件資源監控軟件(zabbix),檢查服務器的資源消耗情況,在沒有安裝zabbix的環境,主要排查的資源包括CPU負載、內存使用情況、磁盤空間、磁盤IO等。
1.1.1 cpu負載
cpu負載就是cpu在一段時間內正在處理以及等待cpu處理的進程數之和的統計信息,也就是cpu使用隊列的長度統計信息,這個數字越小越好。
使用top指令將會輸出如下結果
load average代表CPU的平均負載值,示例中的load average: 1.30, 1.27,1.28分別表示當前CPU在1分鍾、5分鍾和15分鍾內的平均負載。對於單核cpu,一旦大於1,就說明job得不到及時調度,系統性能將會受到影響。對於2核心來說,該值大於2才說明cpu忙不過來。
在top指令輸出結果后,輸入P,將進程按%cpu降序排列,查看哪些進程在大量占用cpu,輸入M,將進程按%MEM降序排列,查看哪些進程在大量占用內存。
1.1.2 內存使用情況
使用free -h查看內存使用情況。
# free -h total used free shared buff/cache available Mem: 15G 12G 295M 38M 2.8G 2.6G Swap: 7.9G 416M 7.5G
total表示系統總的可用物理內存大小,used表示已經使用的物理內存大小,available可以被 應用程序 使用的物理內存大小,當可使用的物理內存大小較小時,結合top指令,查看哪些應用程序占用的大量內存。
1.1.3 磁盤空間
使用df -h查看系統的磁盤使用情況。
# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda2 50G 24G 27G 47% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 28K 7.8G 1% /dev/shm tmpfs 7.8G 37M 7.8G 1% /run tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/sdb2 40G 4.8G 36G 12% /var/scs /dev/sdc2 30G 20G 11G 64% /home /dev/sda1 494M 208M 287M 43% /boot /dev/sdc1 249G 108G 142G 44% /home/sdc /dev/sdb1 239G 133G 107G 56% /home/sdb /dev/sda5 220G 101G 120G 46% /home/sda tmpfs 1.6G 4.0K 1.6G 1% /run/user/42 tmpfs 1.6G 32K 1.6G 1% /run/user/0
對於磁盤使用情況,主要關注已用%,已用%大於80%后要開始清理無效日志、不在使用的安裝包等。
已用%較大的掛載點,使用du -sh 掛載點/*,查看掛載點內個文件、目錄的實際大小。
# du -sh /home/* 20K /home/bats 0 /home/data 127M /home/dba 85M /home/dba1.5.5 9.5G /home/dbus 23M /home/dbus_processor 4.0M /home/hcloud 65M /home/kafka 13M /home/log.tmp 188K /home/lost+found 93M /home/ltest
1.1.4 磁盤IO
使用iostat -x 5查看磁盤IO使用情況。
# iostat -x 5 Linux 3.10.0-957.5.1.el7.x86_64 (node9) 2020年04月09日 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 27.61 0.03 3.72 0.12 0.00 68.52 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sdb 0.01 0.05 5.46 6.23 166.86 351.76 88.76 0.04 3.02 2.45 3.52 0.31 0.36 sda 2.28 5.02 1.24 28.60 36.80 658.85 46.63 0.01 0.24 3.89 0.08 0.12 0.35 sdc 0.01 0.03 0.33 1.07 2.61 8.68 16.14 0.00 0.62 2.50 0.03 0.43 0.06 avg-cpu: %user %nice %system %iowait %steal %idle 3.32 0.00 4.50 0.00 0.00 92.18 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sdb 0.00 0.00 0.00 3.60 0.00 56.00 31.11 0.00 0.00 0.00 0.00 0.00 0.00 sda 0.00 0.20 0.00 32.40 0.00 669.60 41.33 0.00 0.06 0.00 0.06 0.04 0.14 sdc 0.00 0.00 0.00 0.60 0.00 2.40 8.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 4.18 0.00 5.25 0.00 0.00 90.57 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sdb 0.00 0.20 0.00 7.80 0.00 138.40 35.49 0.00 0.05 0.00 0.05 0.05 0.04 sda 0.00 0.00 0.00 29.40 0.00 952.00 64.76 0.00 0.07 0.00 0.07 0.03 0.08 sdc 0.00 0.00 0.00 1.40 0.00 12.80 18.29 0.00 0.00 0.00 0.00 0.00 0.00
重點關注參數:
1、iowait% 表示CPU等待IO時間占整個CPU周期的百分比,如果iowait值超過50%,或者明顯大於%system、%user以及%idle,表示IO可能存在問題。
2、avgqu-sz 表示磁盤IO隊列長度,即IO等待個數。
3、await 表示每次IO請求等待時間,包括等待時間和處理時間
4、svctm 表示每次IO請求處理的時間
5、%util 表示磁盤忙碌情況,一般該值超過80%表示該磁盤可能處於繁忙狀態。
pidstat -d 3命令查看進程占用磁盤IO的情況
kB_rd/s: 每秒進程從磁盤讀取的數據量(以kB為單位)
kB_wr/s: 每秒進程向磁盤寫的數據量(以kB為單位)
# pidstat -d 3 3 Linux 3.10.0-957.5.1.el7.x86_64 (node9) 2020年04月09日 _x86_64_ (4 CPU) 13時35分30秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 13時35分33秒 0 5159 0.00 1.29 0.00 dockerd 13時35分33秒 0 5174 0.00 45.31 0.00 loop0 13時35分33秒 0 5456 0.00 1.29 0.00 rsyslogd 13時35分33秒 0 6379 0.00 2.59 0.00 java 13時35分33秒 0 7791 0.00 2.59 0.00 java 13時35分33秒 0 10411 0.00 1.29 0.00 java 13時35分33秒 27 15611 0.00 132.04 0.00 mysqld 13時35分33秒 0 26538 0.00 1.29 0.00 java 13時35分33秒 0 28097 0.00 1.29 0.00 java 13時35分33秒 0 30421 0.00 3.88 0.00 java 13時35分33秒 0 32541 0.00 1.29 0.00 java