linux服務器 cpu性能問題知識點,常用查詢和解決方法

一,基礎知識:

1.平均負載:單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數

所謂可運行狀態的進程,是指正在使用 CPU 或者正在等待 CPU 的進程,就是我們常用 ps 命令看到的,處於 R 狀態的進 程。

不可中斷狀態的進程則是正處於內核態關鍵流程中的進程,並且這些流程是不可打斷的,

比如最常見的是等待硬件設備的 I/O 響應,也就是我們在 ps 命令中看到的 D 狀態的進程

2.cpu使用率:單位時間內 CPU 繁忙情況

3.上下文切換:進程上下文切換、線程上下文切換、中斷上下文切換

4.中斷(硬,軟中斷):硬中斷是硬件產生的,比如鍵盤、鼠標的輸入,硬盤的寫入讀取、網卡有數據了;軟中斷是軟件產生的,比如程序內的定時器,網絡收發,就是異步操作,硬中斷會打斷 CPU 正在執行的任務,然後立即執行中斷處理程序。而軟中斷以內核線程的方式執行,並且每個 CPU 都對應一個軟中斷內核線程

二,常見問題和查詢方向:

 

1.平均負載很高,超過cpu核數:

CPU 密集型進程,大量io。不可中斷進程過多

2.cpu利用率很高:

首先通過uptime查看系統負載,然後使用 mpstat結合pidstat來初步判斷到底是cpu計算量大還是進程爭搶過大或者是io過多,

接着使用vmstat( vmstat 是一個常用的系統性能分析工具,主要用來分析系統的內存使用情況,也常用來分析 CPU 上下文切換和中斷的次數)分析切換次數,以及切換類型,來進一步判斷到底是io過多導致問題還是進程爭搶激烈導致問題

通過top觀察CPU使用率很高,但是看下面的進程的CPU使用率好像很正常,通過pidstat命令查看cpu也很正常。但通過top查看task數量不正常,處於R狀態的進程是可疑點。

如果碰到不好解釋的CPU問題時,比如現象:

通過top觀察CPU使用率很高,但是看下面的進程的CPU使用率好像很正常,通過pidstat命令查看cpu也很正常。但通過top查看task數量不正常,處於R狀態的進程是可疑點

首要想到可能是短時間的應用導致的問題,如下面的兩個:

(1)應用裏直接調用了其他二進制程序,這些程序通常運行時間比較短,通過top等工具發現不了

(2)應用本身在不停地崩潰重啓,而啓動過程的資源初始化,很可能會佔用很多CPU資源

3.大量不可中斷進程(與硬件交互的進程),殭屍進程(子進程已經結束,但是父進程還沒有回收):

1.先分析iowait升高的原因

一般iowait升高,可能的原因是i/o問題

①用dstat 命令同時查看cpu和i/o對比情況(如 dstat 1 10 間隔1秒輸出10組數據),通過結果可以發現iowait升高時,磁盤讀請求(read)升高

所以推斷iowait升高是磁盤讀導致

②定位磁盤讀的進程,使用top命令查看處於不可中斷狀態(D)的進程PID

③查看對應進程的磁盤讀寫情況,使用pidstat命令,加上-d參數,可以看到i/o使用情況(如 pidstat -d -p <pid> 1 3),發現處於不可中斷狀態的進程都沒有進行磁盤讀寫

④繼續使用pidstat命令,但是去掉進程號,查看所有進程的i/o情況(pidstat -d 1 20),可以定位到進行磁盤讀寫的進程。我們知道進程訪問磁盤,需要使用系統調用

4.大量的軟中斷

查看中斷類型:/proc/interrupts 這個只讀文件中讀取

查看軟中斷: watch -d cat /proc/softirqs  通過 /proc/softirqs 文件內容的變化情況,你可以發現, TIMER(定時中斷)、NET_RX(網絡接收)、SCHED(內核調度)、RCU(RCU 鎖)等這幾個軟中斷都在不停變化

在實際生產中,軟中斷導致的性能瓶頸大多是網絡收發類型的,特別是網絡接收的軟中斷。在碰到這類問題時,可以借用 sar、tcpdump 等工具,做進一步分析。sar 可以用來查看系統的網絡收發情況,tcpdump用來抓包具體分析

5.頻繁的上下文切換

# 每隔5秒輸出1組數據$ vmstat 5   vmstat 只給出了系統總體的上下文切換情況,要想查看每個進程的詳細情況,就需要 pidstat  # 每隔5秒輸出1組數據$ pidstat -w 5

cswch:自願上下文切換,是指進程無法獲取所需資源,導致的上下文切換。比如說, I/O、內存等系統資源不足時,就會發生自願上下文切換

 nvcswch:非自願上下文切換,則是指進程由於時間片已到等原因,被系統強制調度,進而發生的上下文切換。比如說,大量進程都在爭搶 CPU 時,就容易發生非自願上下文切換。

自願上下文切換變多了,說明進程都在等待資源,有可能發生了 I/O 等其他問題;

非自願上下文切換變多了,說明進程都在被強制調度,也就是都在爭搶 CPU,說明 CPU 的確成了瓶頸;

中斷次數變多了,說明 CPU 被中斷處理程序佔用,還需要通過查看 /proc/interrupts 文件來分析具體的中斷類型

最後放一張網上的工具使用圖:

 

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