天天看點

上下文切換(下)

上下文切換的類型:

所謂自願上下文切換,是指程序無法擷取所需資源,導緻的上下文切換。比如說, I/O、記憶體等系統資源不足時,就會發生自願上下文切換。
而非自願上下文切換,則是指程序由于時間片已到等原因,被系統強制排程,進而發生的上下文切換。
比如說,大量程序都在争搶 CPU 時,就容易發生非自願上下文切換。
           

我們可以通過vmstat來檢視CPU上下文切換和中斷的次數。

上下文切換(下)

含義說明:

cs(context switch)是每秒上下文切換的次數。in(interrupt)則是每秒中斷的次數。

r(Running or Runnable)是就緒隊列的長度,也就是正在運作和等待 CPU 的程序數。

b(Blocked)則是處于不可中斷睡眠狀态的程序數。

vmstat 隻給出了系統總體的上下文切換情況,要想檢視每個程序的詳細情況,就需要 pidstat

上下文切換(下)

含義:

一個是 cswch ,表示每秒自願上下文切換(voluntary context switches)的次數,另一個則是 nvcswch ,表示每秒非自願上下文切換(non voluntary context switches)的次數。

分析流程:

首先通過uptime檢視系統負載,然後使用mpstat結合pidstat來初步判斷到底是cpu計算量大還是程序争搶過大或者是io過多,接着使用vmstat分析切換次數,以及切換類型,來進一步判斷到底是io過多導緻問題還是程序争搶激烈導緻問題

參考網址: https://time.geekbang.org/column/article/70077

繼續閱讀