Linux調優之上下文切換

2021-09-10 06:32:02 字數 1491 閱讀 6899

$  vmstat 5
cs(context switch)是每秒上下文切換的次數。

in(interrupt)則是每秒中斷的次數。

r(running or runnable)是就緒佇列的長度,也就是正在執行和等待 cpu 的程序數。

b(blocked)則是處於不可中斷睡眠狀態的程序數。

可以看到,這個例子中的上下文切換次數 cs 是 9892 次,而系統中斷次數 in 則是 124 次,而就緒佇列長度 r 和不可中斷狀態程序數 b 都是 0。

vmstat 只給出了系統總體的上下文切換情況,要想檢視每個程序的詳細情況,就需要使用我們前面提到過的 pidstat 了。給它加上 -w 選項,你就可以檢視每個程序上下文切換的情況了。

這個結果中有兩列內容是我們的重點關注物件。乙個是 cswch ,表示每秒自願上下文切換(voluntary context switches)的次數,另乙個則是 nvcswch ,表示每秒非自願上下文切換(non voluntary context switches)的次數。

這兩個概念你一定要牢牢記住,因為它們意味著不同的效能問題:

1.自願上下文切換,是指程序無法獲取所需資源,導致的上下文切換。比如說, i/o、記憶體等系統資源不足時,就會發生自願上下文切換。

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

其中還有乙個重要的指標,是檢視cpu中斷次數,如下:

$  watch -d cat /proc/interrupts
一般排查問題基本方法: 登入到伺服器,判斷系統負載怎麼樣 。 高的話有三種情況,首先是cpu使用率 ,其次是io使用率 ,之後就是兩者都高 。

cpu 使用率高,可能確實是使用率高, 也的可能實際處理不高而是程序太多切換上下文頻繁 , 也可能是程序內線程的上下文切換頻繁

io 使用率高 , 說明 io 請求比較大, 可能是 檔案io 、 網路io 。

工具 :

系統負載 : uptime ( watch -d uptime)看三個階段平均負載

系統整體情況 : mpstat (mpstat -p all 3) 檢視 每個cpu當前的整體狀況,可以重點看使用者態、核心態、以及io等待三個引數

系統整體的平均上下文切換情況 : vmstat (vmstat 3) 可以重點看 r (進行或等待進行的程序)、b (不可中斷程序/io程序) 、in (中斷次數) 、cs(上下文切換次數)

檢視詳細的上下文切換情況 : pidstat (pidstat -w(程序切換指標)/-u(cpu使用指標)/-wt(執行緒上下文切換指標)) 注意看是自願上下文切換、還是被動上下文切換

io使用情況 : iostat

總結每天之上下文切換

16 什麼是上下文切換 答 比如人工作的時候,準備好裝備好工作需要的工具才能開始正常工作,否則都是工作的準備階段。而我們的cpu是分片執行的 因為cpu執行速度太快,不想浪費,所以都是分片執行任務 我們一般的作業系統都是多工系統,需要執行其它任務,那麼就需要把當前任務的工作環境也就是執行環境儲存到記...

上下文切換

1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...

上下文切換

上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...