linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat
各個進程之間是共享 CPU 資源的,在不同的時候進程之間需要切換,讓不同的進程可以在 CPU 執(zhí)行,那么這個一個進程切換到另一個進程運行,稱為進程的上下文切換。
進程是由內(nèi)核管理和調(diào)度的,所以進程的切換只能發(fā)生在內(nèi)核態(tài)。
所以,進程的上下文切換不僅包含了虛擬內(nèi)存、棧、全局變量等用戶空間的資源,還包括了內(nèi)核堆棧、寄存器等內(nèi)核空間的資源。
大家需要注意,進程的上下文開銷是很關(guān)鍵的,我們希望它的開銷越小越好,這樣可以使得進程可以把更多時間花費在執(zhí)行程序上,而不是耗費在上下文切換。
發(fā)生進程上下文切換有哪些場景?
1. 為了保證所有進程可以得到公平調(diào)度,CPU 時間被劃分為一段段的時間片,這些時間片再被輪流分配給各個進程。這樣,當(dāng)某個進程的時間片耗盡了,就會被系統(tǒng)掛起,切換到其它正在等待 CPU 的進程運行;
2. 進程在系統(tǒng)資源不足(比如內(nèi)存不足)時,要等到資源滿足后才可以運行,這個時候進程也會被掛起,并由系統(tǒng)調(diào)度其他進程運行;
3. 當(dāng)進程通過睡眠函數(shù) sleep 這樣的方法將自己主動掛起時,自然也會重新調(diào)度;
4. 當(dāng)有優(yōu)先級更高的進程運行時,為了保證高優(yōu)先級進程的運行,當(dāng)前進程會被掛起,由高優(yōu)先級進程來運行;
5. 發(fā)生硬件中斷時,CPU 上的進程會被中斷掛起,轉(zhuǎn)而執(zhí)行內(nèi)核中的中斷服務(wù)程序;
下面這個進程是php運行的其中存在sleep函數(shù)
查看到的進程切換如下
pidstat -w -p 進程PID 1 10
cswch/s 每秒有10次的主動切換? , 耗費資源比較多
總結(jié)
以上是生活随笔為你收集整理的linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++计算eigen随笔(2)
- 下一篇: LINUX(Cumulus Linux白