本文面向兩種用戶,普通小白和windows開發(fā)程序員。
win+R 組合鍵打開運行,輸入命令services.msc,回車或確認。
2. 找到如下藍色背景的Windows Management Instrumentation。
3. 雙擊打開屬性彈窗,點擊依存關系。下發(fā)的”以下系統(tǒng)組件依賴此服務“顯示的就是哪些服務會觸發(fā)wmiprvse.exe的運行。比如Dell Data Vault Collector,我們再回到服務去找這個。
4. 留意服務的狀態(tài)是運行中的,像我主機,這個服務就在運行。雙擊打開屬性彈窗。留意下可執(zhí)行文件路徑,到該路徑下看下是否是自己安裝的,最好卸載的方式去除這個服務。
點擊停止的話,可能重啟會再次啟動,所以把啟動類型這里設為禁用。
以上對于小白的一種解決方式,當然若是系統(tǒng)不通過服務的方式調(diào)用wmi則上述步驟不起作用,需要高階排查。
查看wmi的日志,定位到底是誰在密集調(diào)用這個服務??刂婆_執(zhí)行WMIMon.exe<svg width="10px" height="10px" viewbox="0 0 16 16" class="ZDI ZDI--FourPointedStar16 css-1dvsrp" fill="currentColor">
2. Ctrl+C關閉剛剛的命令。日志量可能很大,我這里采用的方法是頻率,看哪個進程調(diào)用頻次高。notepad++打開C盤下的wmilog.txt文件。按照進程_ClientProcessId進行搜索,觀察次數(shù)。如下圖,總共1480次客戶端調(diào)用,光這個就占了640次。那我們就分析這個進程,進程id=5412。
3. 如下圖,就把某絨揪出來了,當然這個可能是誤傷,先卸載后再觀察。如果好了就罷了。如果不好,再分析其他進程id。(此處蛐蛐幾句,搞安全的就是細致,把命令行都隱藏了,也不知道有意無意的~)
至此,作為開發(fā)者比較精細的處理了wmiprvse占用高。那是否會有疑問這個東西是干啥的,為啥這么多程序服務依賴這個。
此節(jié)適合對windows系統(tǒng)有深入興趣的讀者。
首先了解下:WMI(Windows Management Instrumentation)是Windows系統(tǒng)管理的核心技術,用于管理和監(jiān)控系統(tǒng)資源、硬件、軟件和服務。說白了,我們要查詢下cpu的負載、內(nèi)存的余量、磁盤信息等均可以通過此組件。wmi支持的全部如下。
那么導致這個進程CPU占用高的原因是啥?是查詢性能頻繁還是微軟的這個組件本身有問題。實際上2者都存在。以下是微軟自win7關于這個組件的問題。
在 Windows 7 或 Windows Server 2008 R2 中的 Wmiprvse.exe 過程中出現(xiàn)內(nèi)存泄漏 - Microsoft 支持
下圖是msdn上對wmi的架構(gòu)介紹,我們分層看,第三層,是客戶端層或者叫請求層,非官方寫的程序都屬于這一層。通過COM接口的方式調(diào)用WMI的服務。第2層,wmi管理了一個倉庫,就是一個數(shù)據(jù)庫,存儲這些采集數(shù)據(jù)。第1層,是和系統(tǒng)相關調(diào)用,win7、10、11、server可能有差異,就在最低的第1層做了兼容。可理解為微軟自己的全家桶很大,做了一層適配。開發(fā)一次wmi的代碼,在微軟的各個產(chǎn)品均可正常執(zhí)行。
從wmi使用的方式也可看出,和sql語句很像。微軟稱為WQL<svg width="10px" height="10px" viewbox="0 0 16 16" class="ZDI ZDI--FourPointedStar16 css-1dvsrp" fill="currentColor">
對于個人電腦來說wmi使用最多的也就是性能采集,支持腳本的方式對于云服務廠商處理批量主機會方便很多。下面結(jié)合我最近遇到的現(xiàn)場wmiprvse.exe占用高的問題,做個深入分析。
太多了,放到這篇文章了。
WmiPrvse.exe 耗費CPU在干啥 - YBT的文章 - 知乎