Linux 性能診斷:負載評估
概要:負載診斷流程
- 觀察load average (平均負載)
- 觀察CPU、I/O是否存在瓶頸
從load avgerage等總括性的數據著手,參考CPU使用率和I/O等待時間等具體的數字,從而自頂向下快速排查各進程狀態。
概念:什麼是負載?
負載可以分為兩大部分:CPU負載、I/O 負載 。
load average
依次時過去1分鐘,5分鐘,15分鐘內,單位時間的等待任務數,
也就是表示平均有多少任務正處於等待狀態。在load average較高的情況下,就說明等待運行的任務較多,因此輪到該任務運行的等待時間就會出現較大延遲,即反映了此時負載較高。
linux內核的進程調度器(Process Scheduler)
負責決定任務運行的優先順序,以及讓任務等待或使之重新開始等核心工作。調度器劃分並管理進程(Process)的狀態。例如:
等待分配CPU資源的狀態
等待磁碟輸入輸出完畢的狀態
進程描述符的狀態
進程狀態PS Stat說明
TASK_RUNNINGR(Run)運行狀態。只要CPU空閑,隨時都可以開始。TASK_INTERRUPTIBLES(Sleep)可中斷的等待狀態。例如系統睡眠或來自於用戶輸入的等待等。
TASK_UNINTERRUPTIBLED(Disk Sleep)不可中斷的等待狀態。主要為短時間恢復時的等待狀態。例如磁碟輸入輸出的等待TASK_STOPPED響應暫停信號而運行中斷的狀態。直到恢復(Resume)前都不會被調度TASK_ZOMBIEZ(Zombie)僵死狀態。雖然子進程已經終止(exit),但父進程尚未執行wait(),因此該進程的資源沒有被系統釋放
- TASK_RUNNING正在運行
- TASK_RUNNING (等待狀態,加權換算)
- TASK_INTERRUPTIBLE(等待狀態,加權換算)
- TASK_UNINTERRUPTIBLE(等待狀態,不加權換算)
load average 表示「等待進程的平均數」,除了「TASK_RUNNING正在運行」,其它三個都是等待狀態。TASK_INTERRUPTIBLE不被換算。即只換算「雖然需要即刻運行處理,但是無論如何都必須等待」。
load average所描述的負載就是:需要運行處理,但又必需等待隊列前的進程處理完成的進程個數。具體來說:要麼等待授予CPU運行許可權,要麼等待磁碟I/O完成。
- 內核函數:kernei/timer.c的calc-load();
- 調用周期:每次計時器中斷(centos為4ms)
CPU 還是 I/O ?
load average的數字只是表示等待的任務數,僅根據load average並不能判斷具體是CPU負載高還是I/O負載高。
CPU密集型程序
I/O密集型程序
Sar (System Activity Reporter)
CPU使用率和I/O等待時間都是在不斷變化的,可以通過sar 命令來確認這些指標。該工具包含在sysstat軟體包內。
輸出參數:n
- %user:用戶(一般的應用軟體運作模式)CPU資源
- %system:系統(內核運作)佔用CPU資源
- %iowait:I/O等待率。
進程詳細
輸出參數:n
- %CPU:該進程的CPU使用率
- %memb:物理內存百分比
- VSZ、RSS:虛擬/物理內存
- STAT:進程狀態(非常重要)
- TIME:CPU佔用時間
SWAP吞吐
輸出參數:n
- pswpin/s:每秒系統換入的頁面數
- pswpout/s:每秒系統換出的頁面數
發生頻繁的交換時,伺服器的吞吐量性能會大幅下降。
vmstat(Report Virtual Memory Statistics)
實時確認CPU使用率及實際的I/O等待時間
解決方案
優化的真正工作是「找出系統瓶頸並加以解決」,我們所能做的就是「充分發揮硬/軟體本來的性能,解決可能存在的問題」。例如,同樣是I/O問題,我們可以通過增加內存來緩解,也可以調整調度方案來優化(時間換空間),但是更多的情況是,優化應用程序的I/O演算法效果更佳。
最後,重溫一句經典格言
別臆斷,請監控
擴展閱讀:Linux 操作系統
- 《Linus Torvalds:Just for Fun》
- Linux 常用命令一百條
- Linux 性能診斷:負載評估
- Linux 性能診斷:快速檢查單(Netflix版)
- Linux 性能診斷:薦書|《圖解性能優化》
- Linux 性能診斷:Web應用性能優化
- 操作系統原理 | How Linux Works(一):How the Linux Kernel Boots
- 操作系統原理 | How Linux Works(二):User Space & RAM
- 操作系統原理 | How Linux Works(三):Memory
推薦:電子書《Linux Perf Master》
發表在GitBook平台,歡迎訂閱、下載、批評指正:
https://www.gitbook.com/book/riboseyim/linux-perf-master/details
推薦閱讀:
※遷移到 Linux:磁碟、文件、和文件系統
※Linux RAS特性分析
※偽造掌閱ireader plus升級的伺服器
※深入實時 Linux
※Linux 包管理基礎:apt、yum、dnf 和 pkg