LINUX 如何查看系統負載

操作系統的負載狀態,反映了應用程序的資源使用情況,從中能找出應用程序優化的瓶頸所在。

系統平均負載,是指處於運行或不可打擾狀態的進程的平均數。
處於運行,表示運行態,佔用CPU,或就緒態,等待CPU調度。
不可打擾,表示阻塞,正在等待I/O

在 Linux 系統中,要查看負載情況一般使用 uptime 命令(w 命令和 top 命令也行)

一、uptime 命令

$ uptime
16:33:56 up 69 days,  5:10,  1 user,  load average: 0.14, 0.24, 0.29

以上信息的解析如下:

  • 16:33:56 : 當前時間 up 69 days, 5:10 : 系統運行了69天5小時10分 1 user :
  • 當前有1個用戶登錄了系統load average: 0.14, 0.24, 0.29 :
  • 系統在過去1分鐘內,5分鐘內,15分鐘內的平均負載 load average: 0.14, 0.24, 0.29 :
  • 系統在過去1分鐘內,5分鐘內,15分鐘內的平均負載

平均負載解析

查看邏輯 CPU 核心數:

$ 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,這樣就沒有進程需要等待了,所有進程都能第一時間得到處理。

很顯然,1.0 是一個關鍵值,超過這個值,系統就不在最佳狀態了。 一般 0.7 是一個比較理想的值。

另外,load 值的健康狀態還跟系統 CPU 核心數相關,如果 CPU 核心數爲 2,那麼 load 值健康值應該爲 2,以此類推。
評價系統的負載一般採用 15 分鐘內的那個平均負載值。

二、w 命令

$ w
 17:47:40 up 69 days,  6:24,  1 user,  load average: 0.46, 0.26, 0.25
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
lvinkim  pts/0    14.18.144.2      15:55    0.00s  0.02s  0.00s w

第1行 : 與 uptime 一相同。
第2行以下,當前登錄用戶的列表。

三、top 命令

$ top
top - 17:51:23 up 69 days,  6:28,  1 user,  load average: 0.31, 0.30, 0.26
Tasks:  99 total,   1 running,  98 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3%us,  0.2%sy,  0.0%ni, 97.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1922244k total,  1737480k used,   184764k free,   208576k buffers
Swap:        0k total,        0k used,        0k free,   466732k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
    1 root      20   0 19232 1004  708 S  0.0  0.1   0:01.17 init                                                                    
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                                                                
...

第1行 : 與 uptime 一相同。

第2行 : 進程數信息。

  • Tasks: 99 total : 總共有 99 個進程
  • 1 running : 1 個進程正在佔用 CPU
  • 98 sleeping : 98 個睡眠進程
  • 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命令可以查看系統分區的IO使用情況

$ iostat 
Linux 2.6.32-573.22.1.el6.x86_64 (sgs02)   01/20/2017     _x86_64_   (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.29    0.00    0.25    0.04    0.00   97.41

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               1.15         3.48        21.88   21016084  131997520

一些值得注意的IO指標 :

  • Device : 磁盤名稱
  • tps : 每秒I/O傳輸請求量
  • Blk_read/s : 每秒讀取多少塊,查看塊大小可參考命令 tune2fs
  • Blk_wrtn/s : 每秒寫取多少塊
  • Blk_read : 一共讀了多少塊
  • –Blk_wrtn : 一共寫了多少塊

五、iotop 命令

iotop命令類似於top命令,但是顯示的是各個進程的I/O情況,對於定位I/O操作較重的進程有比較大的作用。

# iotop
Total DISK READ: 0.00 B/s | Total DISK WRITE: 774.52 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                
  272 be/3 root        0.00 B/s    0.00 B/s  0.00 %  4.86 % [jbd2/vda1-8]
 9072 be/4 mysql       0.00 B/s  268.71 K/s  0.00 %  0.00 % mysqld
 5058 be/4 lvinkim     0.00 B/s    3.95 K/s  0.00 %  0.00 % php-fpm: pool www
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init

可以看到不同任務的讀寫強度。

六、sysstat工具

很多時候當檢測到或者知道歷史的高負載狀況時,可能需要回放歷史監控數據,這時 sar 命令就派上用場了,sar命令同樣來自sysstat工具包,可以記錄系統的CPU負載、I/O狀況和內存使用記錄,便於歷史數據的回放。

sysstat的配置文件在 /etc/sysconfig/sysstat 文件,歷史日誌的存放位置爲 /var/log/sa
統計信息都是每10分鐘記錄一次,每天的23:59會分割統計文件,這些操作的頻率都在 /etc/cron.d/sysstat 文件配置。

七、sar 命令

使用sar命令查看當天CPU使用:

$ sar
Linux 2.6.32-431.23.3.el6.x86_64 (szs01)   01/20/2017     _x86_64_   (1 CPU)

10:50:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:00:01 AM     all      0.45      0.00      0.22      0.40      0.00     98.93
Average:        all      0.45      0.00      0.22      0.40      0.00     98.93

使用sar命令查看當天內存使用:

$ sar -r
Linux 2.6.32-431.23.3.el6.x86_64 (szs01)   01/20/2017     _x86_64_   (1 CPU)

10:50:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
11:00:01 AM     41292    459180     91.75     44072    164620    822392    164.32
Average:        41292    459180     91.75     44072    164620    822392    164.32

使用sar命令查看當天IO統計記錄:

$ sar -b
Linux 2.6.32-431.23.3.el6.x86_64 (szs01)   01/20/2017     _x86_64_   (1 CPU)

10:50:01 AM       tps      rtps      wtps   bread/s   bwrtn/s
11:00:01 AM      3.31      2.14      1.17     37.18     16.84
Average:         3.31      2.14      1.17     37.18     16.84

更多 sar 用法,請 man sar 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章