解決「系統」進程 CPU 使用率過高的問題

解決「系統」進程 CPU 使用率過高的問題

我注意到,從一段時間以來,我的系統一直凍結,這可能是由系統進程導致的高 CPU 使用率造成的。

我運行的所有應用程式都是 Skype、TeamSpeak 和 Chrome,因此它絕對不應該佔用那麼多 CPU。

您可以在下面的螢幕截圖中看到問題本身和正在運行的進程:

在此輸入影像描述

有時 CPU 使用率達到 90%,但平均使用率約為 40-65%。

我的電腦參數:

  • Windows 8(客戶預覽版)
  • 英特爾酷睿 i3 - 2350M
  • 8GB 記憶體

我將不勝感激任何幫助嘗試!問候。

- 更新 -

正如下面的用戶發布了一個很好的答案,我注意到系統中消耗最多 CPU 的進程被稱為Arthurx.sys,簡單的谷歌告訴它是一個TPLink 驅動程式(一個wifi 適配器,我大約2 週前買了!) drivers已從Windows MSDN安裝,但也嘗試從隨附的CD安裝驅動程序,但沒有幫助。從系統啟動開始,它僅使用大約 5% 的 CPU,但在工作 2-4 小時後,它會逐漸增長並達到 40-60% 的 CPU 使用率。

設備名稱:TPLink WN722N

答案1

介紹

「系統」進程的高 CPU 使用率通常是由硬體驅動程式問題(錯誤、舊版、不相容等)引起的。

系統進程載入(或託管)來自不同供應商的需要更高層級記憶體存取的多個硬體驅動程式。這就是為什麼診斷特定的罪魁禍首可能需要一些偵探工作,如下所述。

診斷問題

若要診斷 CPU 使用問題,您應該使用 Windows 事件追蹤 (ETW) 來擷取 CPU 採樣資料/設定檔。

為了捕獲數據,安裝 Windows 效能工具包,這是視窗軟體開發工具包

Windows 10 WPT 可在 Windows 8/Server 2012、Windows 8.1/Server 2012R2 和 Windows 10/Server 2016 上使用。SDK/WPT(版本 15086)

在此輸入影像描述 (所有其他條目都可以取消選擇)

現在運行WPRUI.exe,選擇First Level,在資源下選擇CPU使用率並點擊開始

在此輸入影像描述

現在捕獲 1 分鐘的 CPU 使用情況。 1分鐘後,點擊節省

現在使用 Windows 效能分析器分析產生的 ETL 文件透過將圖表拖曳CPU Usage (sampled)analysis pane並按圖中所示對列進行排序:

在此輸入影像描述

在 WPA 內部,載入調試符號並展開SYSTEM進程的Stack。在此演示中,CPU 使用率來自 nVIDIA 驅動程式。


在以下示範中,CPU 使用率來自 Realtek 網路卡驅動程式:

在此輸入影像描述


當您看到類似的電話時ntoskrnl.exe!KeTrimWorkerThreadRoutine,ntoskrnl.exe!驗證者修剪內存,ntoskrnl.exe!驗證者離開關鍵區域,這表示您已啟用驅動程式驗證程式。這也會嚴重損害效能並導致系統使用率較高。禁用驅動程式驗證程式並重新啟動。

在此輸入影像描述


在此演示中,驅動程式iai2ce.sys(Intel 串行 IO GPIO 控制器驅動程式)導致它:

在此輸入影像描述


在此範例中,CPU 使用率來自文件rtsuvc.sys,該文件似乎是Realtek UVC webcam Driver

在此輸入影像描述


該演示顯示 Bitdefender 驅動程式ignis.sys

在此輸入影像描述


在以下範例中,CPU 使用率是由 Broadcom 網路驅動程式引起的bcmwl664.sys

在此輸入影像描述


當你將ntoskrnl.exe!MiZeroWorkerPages其視為原因時,事情就變得更加棘手。這意味著核心在再次使用記憶體之前將記憶體清除的函數會導致 CPU 使用率過高:

在此輸入影像描述

沒有真正的方法來檢測哪個進程導致它,但我知道如果您在 Chrome 中啟用了硬體加速,Chrome 可能會導致它。因此,如果您看到此內容並使用 Chrome,請關閉 Chrome 中的硬體加速。


當你看到那些ntoskrnl.exe!RtlpGenericRandomPatternWorker, ntoskrnl.exe!RtlpTestMemoryRandomUp來電

在此輸入影像描述

CPU 使用情況來自內核,用於測試記憶體問題 (memtest)。此使用是透過Windows 8.1/10的空閒維護任務觸發的。您可以使用任務排程程式來停用空閒任務。

在此輸入影像描述

在 Windows 10 中,該任務稱為 RunFullMemoryDiagnostics,位於Microsoft > Windows > 記憶體診斷 > RunFullMemoryDiagnostic

在此輸入影像描述


在這種情況下,CPU使用率似乎來自Windows Server的Data DeduplicationFeature( ):dedup.sys!DdpPostCreate

在此輸入影像描述


本demo中CPU佔用是由WIFI卡驅動造成的athrx.sys

在此輸入影像描述

如果看到此內容,請搜尋驅動程式更新。


在下面的演示中,涉及到一個citrix驅動程式:

在此輸入影像描述

因此,請聯絡您的 IT 人員以了解如何解決 Citrix 問題。


在此演示中,該函數usbhub.sys!UsbhPortRecycle導致 CPU 使用率:

在此輸入影像描述

將 USB2.0 連接埠更改為 1.1 速度或將 USB 隨身碟連接到其他 USB 2.0 連接埠對某些使用者有幫助。


在這種情況下,少量的系統使用來自 Acronis 驅動程式tdrpm251.sys

在此輸入影像描述


在此示範中,CPU 使用率ntoskrnl.exe!KeAcquireSpinLockRaiseToDpcntoskrnl.exe!KeReleaseSpinLock.

在此輸入影像描述

所以司機正在使用自旋鎖非常重。停用某些裝置/驅動程序,直到找到導致該問題的裝置/驅動程式。


在這種情況下,CPU使用率是由驅動程式引起的L1C62x64.sys

在此輸入影像描述

這是qualcomm atheros AR8171/8175 PCI-E gigabit Ethernet司機。因此,如果您在堆疊中看到驅動程序,請更新該驅動程式。


這裡,CPU使用率來自掃描主機檔案(netbt.sys!DelayedScanLmHostFile)

在此輸入影像描述

確保您的主機檔案不太大以避免這種使用。


在本例中,CPU 使用率來自SRTSP64.SYSsymantec。

在此輸入影像描述

將您使用的 symantec 產品更新至最新版本。


這裡,CPU使用率來自AMD GPU驅動程式(atikmdag.sys)

在此輸入影像描述

如果您看到此信息,請訪問 AMD 網站並獲取適用於您的 AMD 卡的最新驅動程式。


其中,驅動程式 TMXPFlt.sys 和 VsapiNt.sys 導致 CPU 使用率較高。

在此輸入影像描述

據我所知,這些文件是趨勢科技 AV 套件的一部分。更新該工具或將其刪除。


在此範例中,CPU 使用率來自函數ntoskrnl.exe!MmGetPageFileInformation

在此輸入影像描述

此函數會取得有關頁面文件的資訊。

例程描述:此例程傳回有關目前活動分頁檔案的資訊。

停用頁面文件,重新啟動並再次啟用它,看看是否可以解決問題。另外,刪除英特爾服務(例如英特爾內容保護 HECI 服務)似乎為用戶修復了它


在這裡,您可以看到驅動程式Netwtw04.sys(Intel Wifi 驅動程式)呼叫該函數flushCompleteAllPendingFlushRequests,這導致 CPU 使用率很高。

在此輸入影像描述

由於偵錯符號已加載,因此使用 Windows 內建驅動程式。只有在這裡我們才能獲得調試符號來查看帶有函數名稱的呼叫堆疊flushCompleteAllPendingFlushRequests

在這裡,你應該安裝英特爾的最新驅動程式要解決這個問題。


SYSTEM 使用最複雜的情況是呼叫堆疊中的 ACPI.sys 使用:

Line #, DPC/ISR, Module, Stack, Count, Process, Weight (in view) (ms), TimeStamp (s), % Weight
6, , ,   |    |- ACPI.sys!ACPIWorkerThread, 40246, , 39.992,941063, , 4,13
7, , ,   |    |    ACPI.sys!RestartCtxtPassive, 40246, , 39.992,941063, , 4,13
8, , ,   |    |    ACPI.sys!InsertReadyQueue, 40246, , 39.992,941063, , 4,13
9, , ,   |    |    ACPI.sys!RunContext, 40246, , 39.992,941063, , 4,13
10, , ,   |    |    ntoskrnl.exe!KeReleaseSpinLock, 40246, , 39.992,941063, , 4,13
11, , ,   |    |    ntoskrnl.exe!KiDpcInterrupt, 40246, , 39.992,941063, , 4,13
12, , ,   |    |    ntoskrnl.exe!KiDispatchInterruptContinue, 40246, , 39.992,941063, , 4,13
13, , ,   |    |    ntoskrnl.exe!KxRetireDpcList, 40246, , 39.992,941063, , 4,13
14, , ,   |    |    ntoskrnl.exe!KiRetireDpcList, 40246, , 39.992,941063, , 4,13
15, , ,   |    |    |- ntoskrnl.exe!KiExecuteAllDpcs, 40198, , 39.945,173325, , 4,13
16, , ,   |    |    |    |- ACPI.sys!ACPIInterruptDispatchEventDpc, 27565, , 27.408,930428, , 2,83
17, , ,   |    |    |    |    |- ACPI.sys!ACPIGpeEnableDisableEvents, 24525, , 24.384,921620, , 2,52
18, , ,   |    |    |    |    |    ACPI.sys!ACPIWriteGpeEnableRegister, 24525, , 24.384,921620, , 2,52
19, , ,   |    |    |    |    |    |- hal.dll!HalpAcpiPmRegisterWrite, 24421, , 24.281,015516, , 2,51
20, , ,   |    |    |    |    |    |    |- hal.dll!HalpAcpiPmRegisterWritePort, 24166, , 24.027,316013, , 2,48

這非常難以調試。在一個系統內部主題,我列出了一些建議:

  • 確保 CPU 不會因 CPU 風扇中的灰塵而過熱
  • 更新或重新刷新(相同的)BIOS/UEFI
  • 載入預設 BIOS/UEFI 設定
  • 確保電池沒有損壞,從筆記型電腦中取出電池或在裝置管理員中停用電池。
  • 改變跳線 在硬碟盒上如果您已將 DVD/藍光光碟機替換為 Caddy,以便在舊 HDD 旁安裝 SSD

在此輸入影像描述


在以下演示中,igdkmd64.sysIntel HD 630 版本 .4574 的 Intel HD 驅動程式導致了這個問題:

在此輸入影像描述

解決辦法是更新到驅動程式版本至少為 .4590。


以下情況,SYSTEM進程佔用CPU是由驅動程式造成的stdriverx64.sys

在此輸入影像描述

這似乎是一個音訊串流驅動程式。因此,如果您在 WPA 中看到此內容,請更新此軟體/驅動程式。


如果您看到 SYSTEM 的呼叫堆疊中呼叫的驅動程式risdxc64.sys導致 CPU 使用率較高,請更新理光 PCIe SDXC/MMC 主機控制器如果沒有驅動程式更新修復它,請驅動程式或在裝置管理員中停用 SD 讀卡機。

在此輸入影像描述

許多聯想設備似乎都內建了該 SD 讀卡機。


用戶 @stevemidgley 展示了 CPU 使用率較高的新問題Wdf01000.sys!FxSystemWorkItem::_WorkItemThunk

在此輸入影像描述

在這裡您可以看到驅動程式 UDE.sys 導致它。

在符號中心

在此輸入影像描述

我可以看到它屬於調製解調器驅動程序,並且追蹤的 PNP 數據顯示Fibocom L850-GL(LTE 調製解調器)作為可能的設備:

在此輸入影像描述

解決方法是在裝置管理員中停用調變解調器和 USB 複合裝置。


使用者@法賈爾提供了以下案例:

在此輸入影像描述

這裡cpu使用率很小,但是如果換成查看DPC/ISR使用率

在此輸入影像描述

您可以看到 avgNetHub.sys 驅動程式導致大量 DPC 使用

在此輸入影像描述

從名稱上看,該驅動程式是AVG防毒軟體的一部分。因此,如果您在追蹤中看到此情況,請更新軟體或將其刪除。


答案2

這可能是由系統載入的錯誤驅動程式或其他模組引起的。要查看系統進程的內部,您可以使用類似的工具流程瀏覽器

下載並運行它,然後選擇系統進程,右鍵單擊並選擇屬性:

在此輸入影像描述

切換到“線程”選項卡(忽略提到符號的對話框):

在此輸入影像描述

這將顯示哪個檔案正在使用過多的 CPU 使用率,然後您可以嘗試從中診斷它。

然而,正如其他人在評論中所說,您確實需要盡快放棄預覽版本!

答案3

關於加載調試符號以添加到的註釋magicandre1981 的優秀答案:如果在Windows效能分析器中載入符號運作正常,勾選後跡線 > 載入符號你應該在頂部看到一個進度條載入符號它旁邊顯示檔名,需要幾分鐘才能完成。您還應該在診斷控制台中看到許多如下所示的行:

SYMSRV:  File: Accessibility.ni.pdb

SYMSRV:  Notifies the client application that a proxy has been detected.
SYMSRV:  Connecting to the Server: http://msdl.microsoft.com/download/symbols.
SYMSRV:  Successfully connected to the Server.
SYMSRV:  Sending the information request to the server.
SYMSRV:  Successfully sent the information request to the server.
SYMSRV:  Waiting for the server to respond to a request.
SYMSRV:  Successfully received a response from the server.
SYMSRV:  Closing the connection to the Server.
SYMSRV:  Successfully closed the connection to the Server.
SYMSRV:  Get File Path: /download/symbols/Accessibility.ni.pdb/7B46178957827CDAB7EE4C86EDEE1DAE1/Accessibility.ni.pdb

如果您沒有看到其中任何一個,則載入偵錯符號可能不起作用,並且您將無法正確解釋追蹤。

就我而言,最初加載調試符號不起作用。我通過以下方式修復了它這些說明:

  1. 確定您使用的是 x86 還是 x64 版本的 Windows Performance Toolkit。

    這在 x86 版本的 Windows 上很容易。在 x64 版本上,您可以檢查任務管理器中的 *32 標記。如果不存在,那麼您正在運行 x64 版本。

    請注意,無論體系結構如何,WPT 始終安裝到 Program Files (x86)。

  2. dbghelp.dll將和檔案從正確的偵錯器目錄複製symsrv.dll到 Windows Performance Toolkit 目錄。在我的系統上,相關目錄是:

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit

  3. 重新啟動 Windows 效能分析器,以便選擇正確版本的 dbghelp.dll。

答案4

回答添加者@magicandre1981是解決任何問題的關鍵。我的案例沒有在那裡列出,但我在The most complicated case of SYSTEM usage is ACPI.sys usage in the callstack:部分描述的堆疊中找到了類似的單字。就我而言,安裝Intel Rapid Storage驅動程式很有幫助。我沒想到會發生這種情況,因為在沒有這個驅動程式並且沒有任何 CPU 問題的情況下,所有人都工作了很長時間。我把我的堆疊放在這裡,可能有人會透過類似的關鍵字找到這個答案。

Line #, Process, Stack, Count, Weight (in view) (ms), TimeStamp (s), % Weight
3, , [Root], 45104, 45,300.439000, , 16.21
4, ,   ntoskrnl.exe!KiStartSystemThread, 45104, 45,300.439000, , 16.21
5, ,   ntoskrnl.exe!PspSystemThreadStartup, 45104, 45,300.439000, , 16.21
6, ,   |- ntoskrnl.exe!SMKM_STORE_MGR<SM_TRAITS>::SmCompressCtxWorkerThread, 38830, 38,997.540000, , 13.95
7, ,   |    |- ntoskrnl.exe!SMKM_STORE_MGR<SM_TRAITS>::SmCompressCtxProcessEntry, 38708, 38,874.943400, , 13.91
8, ,   |    |    |- ntoskrnl.exe!memcpy, 33888, 34,032.390100, , 12.18
9, ,   |    |    |    |- ntoskrnl.exe!memcpy<itself>, 33655, 33,795.069100, , 12.09
10, ,   |    |    |    |- ntoskrnl.exe!KiDpcInterrupt, 228, 232.331300, , 0.08
11, ,   |    |    |    |- ntoskrnl.exe!KiInterruptDispatchNoLockNoEtw, 4, 3.989700, , 0.00
12, ,   |    |    |    |- ntoskrnl.exe!KiInterruptDispatch, 1, 1.000000, , 0.00
13, ,   |    |    |- ntoskrnl.exe!RtlCompressBuffer, 2571, 2,585.541600, , 0.93
14, ,   |    |    |- ntoskrnl.exe!SMKM_STORE_MGR<SM_TRAITS>::SmCompressCtxProcessReadyQueue, 2015, 2,022.554900, , 0.72
15, ,   |    |    |- ntoskrnl.exe!MmBuildMdlForNonPagedPool, 129, 129.294600, , 0.05
16, ,   |    |    |- ntoskrnl.exe!SMKM_STORE_MGR<SM_TRAITS>::SmCompressCtxProcessEntry<itself>, 63, 62.901700, , 0.02
17, ,   |    |    |- ntoskrnl.exe!ExAcquireSpinLockExclusive, 31, 31.208200, , 0.01
18, ,   |    |    |- ntoskrnl.exe!MetroHash64::Hash, 10, 10.033100, , 0.00
19, ,   |    |    |- ntoskrnl.exe!KiDpcInterrupt, 1, 1.019200, , 0.00
20, ,   |    |- ntoskrnl.exe!SMKM_STORE_MGR<SM_TRAITS>::SmCompressCtxWorkerThread<itself>, 78, 78.477100, , 0.03
21, ,   |    |- ntoskrnl.exe!ExAcquireSpinLockExclusive, 39, 39.068100, , 0.01
22, ,   |    |- ntoskrnl.exe!KeWaitForSingleObject, 5, 5.051400, , 0.00
23, ,   |- ntoskrnl.exe!SMKM_STORE<SM_TRAITS>::SmStWorkerThread, 5420, 5,445.923200, , 1.95
24, ,   |- ntoskrnl.exe!SmKmStoreHelperWorker, 495, 496.265200, , 0.18
25, ,   |- ntoskrnl.exe!SMKM_STORE<SM_TRAITS>::SmStReadThread, 359, 360.710600, , 0.13
26, , n/a, 16760, 16,773.871200, , 6.00

更新:不幸的是問題又回來了。重新啟動後,PC 工作正常一段時間,但隨後相同的堆疊出現相同的 CPU 洩漏

相關內容