用工具快速定位數據庫問題
女主宣言
我們經常會收到業務反饋“在么? xx端口感覺訪問有點慢啊!” 在確認數據庫本身沒有問題(沒有down、沒有數據庫報錯)之后,就需要檢測服務器的各項指標排查問題。今天就給大家介紹一個非常好用的檢測工具sar。
常見問題
在日常數據庫運維中,我們經常會遇到下面幾種情況:
- 數據庫卡慢
- 服務器負載過高
- 服務器異常重啟
遇到這些情況后,通常我們會使用一些工具來檢測服務器的狀態。
強大的sysstat工具包
sysstat是一個軟件包,包含監測系統性能及效率的一組工具。
安裝兩種安裝方式:
- sudo yum install sysstat
- git clone git://github.com/sysstat/sysstat
包含工具
sysstat工具集包含以下幾個常用工具:
iostat:用于監控系統設備的IO負載情況。mpstat:用于多CPU環境下查看各個可用CPU的狀態信息。
pidstat:用于監控全部或指定進程占用系統資源的情況。
sar:目前Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告。
今天主要介紹一下功能強大的sar。
Sar
sar(System Activity Reporter系統活動情況報告)是目前 Linux 上最為全面的系統性能分析工具之一,sar 工具將對系統當前的狀態進行取樣,然后通過計算數據和比例從多方面顯示系統的當前運行狀態,包括:文件的讀寫情況、系統調用的使用情況、磁盤I/O、CPU效率、內存使用狀況、進程活動及IPC(進程間通信)有關的活動等。
特點
可以連續對系統取樣,獲得大量的取樣數據
取樣數據和分析的結果都可以存入文件,所需的負載很小
sar 提供了豐富的選項,功能強大
Sar統計項
- 磁盤I/O及數據傳輸速率統計數據
- CPU統計數據
- 內存、特大頁和交換空間利用率統計數據
- 虛擬內存、分頁和故障統計數據
- 網絡統計數據
- 進程創建統計數據
- 中斷統計數據
- 光纖通道的流量統計數據
- NFS服務器和客戶端活動統計數據
- Socket統計數據
- 隊列及系統負載統計數據
- 內核內部表統計數據
- TTY活動統計數據
- 文件系統利用率統計數據
通過圖解也可以看出來sar的功能相當強大,我們今天只介紹幾個對數據庫問題排查有幫助的參數。
1排查CPU問題
使用 -u 或 -p 參數
報告CPU的統計信息
- 輸出項說明:
- CPU: all 表示統計信息為所有 CPU 的平均值。
- %user: 用戶級別(application)運行使用CPU 總時間的百分比。
- %nice: 用戶級別,用于nice操作所占用 CPU 總時間的百分比(nice命令用于改變進程的優先級)
- %system: 內核級別(kernel)運行所使用 CPU 總時間的百分比。
- %iowait: 等待I/O操作占用 CPU 總時間的百分比。
- %steal: 管理程序為另一個虛擬進程提供服務而等待虛擬CPU的百分比
- %idle: CPU 空閑時間占用 CPU 總時間的百分比。
分析:
若 %iowait 的值過高,表示硬盤存在I/O瓶頸。
若 %idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量。
若 %idle 的值持續低于1,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU 。
使用 -q 參數
報告進程隊列長度和平均負載狀態。
- 輸出項說明:
- runq-sz: 運行隊列的長度(等待運行的進程數)
- plist-sz:進程列表中進程(processes)和線程(threads)的數量
- ldavg-1: ***1分鐘的系統平均負載(System load average)
- ldavg-5: 過去5分鐘的系統平均負載
- ldavg-15:過去15分鐘的系統平均負載
2排查內存問題
使用 -r 參數
報告內存和交換空間使用情況
- 輸出項說明:
- kbmemfree:可用內存(kb)。這個值和free命令中的free值基本一致,所以它不包括buffer和cache的空間.
- kbmemused:已用內存(kb)。但是不包括內核本身使用的內存,這個值和free命令中的used值基本一致,所以它包括buffer和cache的空間.
- %memused: 內存使用百分比。這個值是kbmemused和內存總量(不包括swap)的一個百分比.
- kbbuffers:內核本身用于buffers使用的內存(kb)
- kbcached: 內核本身用于cached使用的內存(kb)
- kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache.
- kbswpfree:剩余swap空間(kb)
- kbswpused:已用swap空間(kb)
- %swpused: swap使用百分比
- kbswpcad: swap與內存的交換緩存值。內存中的數據交換至swap
使用 -W 參數
報告swap統計數據
- 輸出項說明:
- pswpin/s:系統交換至swap分區頁的數量
- pswpout/s:系統交換出swap分區也的數量
使用 -B 參數
內存分頁情況統計信息
- 輸出項說明:
- pgpgin/s:表示每秒從磁盤或SWAP置換到內存的字節數(KB)。低版本內核(2.2.x),這個值表示每秒置換的塊數。
- pgpgout/s:表示每秒從內存置換到磁盤或SWAP的字節數(KB)。
- fault/s:每秒鐘系統產生的缺頁數(major + minor)(2.5版本的內核)缺頁中斷并不一定產生I/O。
- majflt/s:每秒鐘產生的主缺頁數,需要從磁盤加載到內存中1的數據頁(2.5版本的內核報告)。
說明:
高分頁操作是內存缺乏的信號。
3排查I/O問題
使用 -b 參數
顯示I/O和磁盤讀寫速率的統計信息
- 輸出項說明:
- tps: 每秒鐘物理設備的 I/O 傳輸總量。一個物理設備的I/O請求,多次邏輯請求可以組合成一個特定設備的I/O請求。
- tps: 每秒鐘從物理設備讀入的數據總量
- wtps: 每秒鐘向物理設備寫入的數據總量
- bread/s:每秒鐘從物理設備讀入的數據量,單位為 塊/s。高于2.4版本內核的塊的大小為512字節。低版本內核塊的大小是不確定的
- bwrtn/s:每秒鐘向物理設備寫入的數據量,單位為 塊/s
使用 -u 或 -p 參數
可參考上面排查cpu問題里的介紹。
使用 -d (-p)參數
設備塊使用情況(適用于2.4及更新的內核)
- 輸出項說明:
- tps:每秒從物理磁盤I/O的次數.多個邏輯請求會被合并為一個I/O磁盤請求,一次傳輸的大小是不確定的.
- rd_sec/s:每秒讀扇區的次數.扇區的大小為512b
- wr_sec/s:每秒寫扇區的次數.扇區的大小為512b
- avgrq-sz:平均每次設備I/O操作的數據大小(扇區).
- avgqu-sz:磁盤請求隊列的平均長度.
- await:從請求磁盤操作到系統完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1秒=1000毫秒).
- svctm:磁盤I/O請求到設備的平均服務時間(以毫秒為單位)
- %util:磁盤I/O請求到設備的CPU平均百分比(設備寬帶利用率) 當這個值接近100%的時候,表示設備繁忙。
說明:
- avgqu-sz的值較低時,設備的利用率較高。
- 當%util的值接近 1 時,表示設備帶寬已經占滿。
- 當數據顯示時,使用的設備規范為:dev m-n。
- m是設備的主設備號,***的內核(2.5+),n是次設備號,但2.5版本之前的內核,只有一個序列數。
- 如果使用-p 參數,設備名稱也可能是可打印形式。
- 也就是說:參數-p可以打印出sda,hdc等磁盤設備名稱,如果不用參數-p,設備節點則有可能是dev8-0,dev22-0。
- 某些2.4版本的內核,avgqu-sz, await, svctm 和 %uti可能是不可用,顯示為0.00。
4排查網卡流量問題
使用-n DEV 參數
網絡統計報告
- -n 參數對應不同的關鍵字時報告不同的信息:
- DEV關鍵字,報告網絡統計數據。
- EDEV關鍵字,針對網絡設備匯報其失敗情況
- NFS關鍵字,針對NFS客戶端進行匯報。
- NFSD關鍵字,針對NFS服務端進行匯報。
- SOCK關鍵字,對用戶使用的sockets進行匯報
ALL關鍵字,針對上述所有網絡信息進行匯報
通常情況下,我們只關注網卡流量,即使用-n DEV 參數
- 輸出項說明:
- IFACE:就是網4絡設備的名稱
- rxerr/s:每秒鐘接收到的損壞的包的數目
- txerr/s:當發送包時,每秒鐘發生的錯誤數
- coll/s:當發送包時,每秒鐘發生的沖撞(collisions)數(這個是在半雙工模式下才有)
- rxdrop/s:由于緩沖區滿,網絡設備接收端,每秒鐘丟掉的網絡包的數目
- txdrop/s:由于緩沖區滿,網絡設備發送端,每秒鐘丟掉的網絡包的數目
- txcarr/s:當發送數據包時,每秒鐘載波錯誤發生的次數
- rxfram/s:在接收數據包時,每秒鐘發生的幀對齊錯誤的次數
- rxfifo/s:在接收數據包時,每秒鐘緩沖區溢出錯誤發生的次數
- txfifo/s:在發送數據包時,每秒鐘緩沖區溢出錯誤發生的次數
以上就是數據庫排查過程中,常用到的sar的參數。