那些吃CPU的大户
????最近沉浸在代碼的世界里,處于兩耳不聞窗外事的狀態。今晚偶有閑暇,看了一眼任務管理器,IDLE進程的時間居然有800多小時,還有多個進程的CPU凈時間達到小時級別。
????如下圖所示,IDLE進程的CPU凈時間為832個小時18分15秒。這說明我很長時間沒有重啟這臺電腦了。除了IDLE進程,CPU凈時間達到小時級別的還有8位,它們是本文的主角。
? ? 8個達到小時級別的進程分別是:
系統進程,排名第1位,累計用CPU時間接近17個小時,這個很不正常,稍后深入探究
dwm,桌面窗口管理器,排名第2位,也有些意外
ism2,英特爾公司的軟件更新管理工具,排名第3位,不干什么正事的應用,還花這么多時間,多半是有劣質代碼亂跑,不過算了吧,不多說了
msmpeng.exe,Windows自帶的安全引擎,一般來說,安全軟件是吃CPU的大戶,一般它是要排在前三的,現在落到第4了,真的算很好了,要表揚一下
svchost.exe,后臺服務的宿主進程,根據進程號查一下,這個進程里的服務是superfetch,提高性能用的,念其用心良苦,花些時間也不責怪它了
baidunetdisk.exe,百度網盤的客戶端,也就是以前的百度云管家,老雷曾經批判過的。不知道是不是與老雷的文章有關,文章發表后,這個工具洗心革面,不僅改了以前的問題,而且改了名字。安靜一年多了,最近一段時間感覺又有些激進,經常占很多CPU和I/O。可能是團隊里來新員工了吧?
接下來兩位是explorer和powerpoint,沒啥好說的了,兩個人的活確實比較累
為什么達到小時級別值得關注呢?因為今天的CPU太快了,真可謂風馳電掣,一秒鐘可以執行幾G條指令。不信你看,任務管理器里面排在后面的很多程序用的CPU凈時間都是0小時0分0秒,這些都是綠色標兵。
? ? 值得表揚的是旺旺客戶端(加亮的那個),老雷今年年初曾經批評過它,開發工程師聯系我,說會改正問題,看來改進的不錯。
? ? 回過頭來再說系統進程吧,它是內核的宿主。內核相當于軟件世界的ZF,按說它應該比較輕,不花什么資源。但是現在它卻占了最多的CPU時間(如此說話時,不包括IDLE進程)。
????當內核被普通線程調用時,它所占的時間是記錄在調用線程上的。因此,? ? 系統進程占的時間都是它自己的系統線程運行時花費的。
????觀察任務管理器,系統進程的線程數多達190個。那么,是哪個系統線程花的時間比較多呢?要回答這個問題,沒有專業工具不行了。
????喚出WinDBG,開始本地內核調試。“啊?老雷,你的機器總啟用著內核調試啊?”?
? ? “是的!”?
????執行!process 4列出系統進程的所有線程。WinDBG一邊列線程,一邊加載符號,花了很久,終于搞定。
????然后搜索“KernelTime? ? ? ? ? ? ? ? 0n” (n為1-9),于是發現一個使用4小時多的線程,有圖有真相,且看:? ??
UserTime? ? ? ? ? ? ? ? ? 00:00:00.000
KernelTime? ? ? ? ? ? ? ? 04:24:43.437
????這是干什么的線程呢?
? ? 從棧回溯來看,線程的主函數是dxgmms2!VidMmWorkerThreadProc,其中,dxgmms2是模塊名,搜索互聯網,可以找到很多與這個模塊有關的藍屏崩潰。它還有個同門兄弟,叫dxgmms1,也是一樣,有很多崩潰記錄。
????那么這兄弟兩個是誰家的呢?是微軟家的。
????做什么用的呢?是管理GPU的。再具體一點,它們肩負著兩個與GPU相關的重要任務:
????- 顯存管理,簡稱VidMM
????- GPU調度,簡稱VidSchi
????從上面線程的工作函數名來看,VidMmWorkerThreadProc,它是屬于VidMM的。
????繼續搜索用時超過2小時的線程,還有如下一個:
????看它的工作函數VidSchiWorkerThread,居然就是dxgmms中的調度器線程:
????dxgmms2!VidSchiRun_PriorityTable
????dxgmms2!VidSchiWorkerThread
? ? 繼續搜索,還有一個超過2小時的線程,是igfxdcd,它是英特爾的GPU調試輔助驅動,用于調試OpenCL程序。它的設計明顯存在缺欠,不管是否在調試,都有一個系統線程在跑,真是不應該。
????繼續搜索超過1小時的系統線程,有兩個,一個是KeBalanceSetManager,是NT內核自己的,用來修剪進程工作集的。
????另一個是ZeroPageThread,是用來準備清零內存頁的,在內核啟動時,是這個線程發起關鍵的執行體初始化動作,內核啟動后,它退居二線,專門負責把內存頁清0,當驅動程序需要已經清0的內存頁時,滿足需要。
????綜上,超過小時級別的系統線程有5個,三個是GPU相關的,另外兩個是普通內存相關的。它們加起來一共消耗了10個小時多的CPU凈時間,很是驚人。
***********************************************************
正心誠意,格物致知,以人文情懷審視軟件,以軟件技術改變人生。
歡迎關注格友公眾號
總結
- 上一篇: 轻松制作短视频网页工具:锐视RyView
- 下一篇: php.450 pr,pr界面介绍有哪些