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平台,歡迎訂閱、下載、批評指正:

gitbook.com/book/ribose


推薦閱讀:

遷移到 Linux:磁碟、文件、和文件系統
Linux RAS特性分析
偽造掌閱ireader plus升級的伺服器
深入實時 Linux
Linux 包管理基礎:apt、yum、dnf 和 pkg

TAG:Linux | Linux系统管理 | 性能分析 |