Linux如何查看系統負載

Linux如何查看系統負載

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

系統平均負載,是指處于運行或不可打擾狀態的進程的平均數。

處于運行,表示運行態,占用 CPU,或就緒態,等待 CPU 調度。

不可打擾,表示阻塞,正在等待 I/O

推薦:【linux視頻教程

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 。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享