รับรางวัล 8.1 explorer กิน CPU เมื่อเปิด“ อุปกรณ์และเครื่องพิมพ์”


2

ฉันกำลังเผชิญกับปัญหาที่แปลกประหลาดซึ่งฉันไม่สามารถแก้ไขได้ ฉันค้นพบเมื่อเร็ว ๆ นี้ว่า Win 8.1 Update 1 ของฉัน (ด้วยการอัปเดตทั้งหมดผ่าน WSUS ออฟไลน์) เริ่มกิน CPU ทั้งหมดเมื่อเปิดหน้าต่าง "อุปกรณ์และเครื่องพิมพ์"

มีความล่าช้าประมาณ 5-10 'จนกว่าอุปกรณ์จะปรากฏขึ้นอย่างไรก็ตาม CPU ยังคงหมุนต่อไปแม้ว่าจะมีการแสดงไอคอนเป็นเวลาประมาณ 5-10 นาที

ไฟล์ Xperf (ขอบคุณ @ magicandre1981 สำหรับคำแนะนำ) โพสต์ในDropbox - ซิปขนาด 24MB แยกออกเป็น 145MB

เมื่อมองผ่านกระบวนการสำรวจ Sysinternals ดูเหมือนว่าปัญหาเกิดจากการMultiByteToUnicodeNโทร (น่าเสียดายที่ฉันไม่สามารถโพสต์ภาพได้):

ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0 ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0 ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0 ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0 ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0 SHCORE.dll!GetScaleFactorForDevice+0x1d4 FunDisc.dll!DllCanUnloadNow+0x2e8 SHCORE.dll!GetScaleFactorForDevice+0x1d4 SHCORE.dll!GetScaleFactorForDevice+0x1d4 windows.immersiveshell.serviceprovider.dll! SHCORE.dll!GetScaleFactorForDevice+0x1d4 SHCORE.dll!GetScaleFactorForDevice+0x1d4 SHCORE.dll!GetScaleFactorForDevice+0x1d4 SHCORE.dll!GetScaleFactorForDevice+0x1d4 Explorer.EXE

แนวคิดใดที่จะแก้ไขปัญหานี้ ฉันอาจรอ 20 'หรือมากกว่านั้นหรือต้องฆ่าภารกิจนักสำรวจ ฉันได้ลองติดตั้งอุปกรณ์ทั้งหมดใหม่เพื่อไม่ให้มีประโยชน์ ด้วยเหตุผลบางประการการแสดงผลหน้าต่างนี้ทำให้การแปล unicode กิน CPU ทั้งหมด

อัปเดตด้วยสัญลักษณ์

จากความคิดเห็นที่ได้รับฉันได้ติดตั้งสัญลักษณ์การค้าปลีกสำหรับ windows 8.1 และเครื่องมือชี้กระบวนการ (ตามที่อธิบายในโพสต์นี้ไปแล้ว แต่ผลลัพธ์ดูเหมือนจะเหมือนกันมากฉันดูที่สแต็กสำหรับเธรดและดูเหมือนว่า ใช้เวลาส่วนใหญ่ในการซิงโครไนซ์กับวัตถุเดียว: ntoskrnl.exe!KeSynchronizeExecution+0x2246 ntoskrnl.exe!KeRemoveQueueEx+0x108e ntoskrnl.exe!KeRemoveQueueEx+0xae9 ntoskrnl.exe!KeWaitForSingleObject+0x22a ntoskrnl.exe!KeSetBasePriorityThread+0x4ec ntoskrnl.exe!KeRemoveQueueEx+0x281d ntoskrnl.exe!KiCheckForKernelApcDelivery+0x23 ntoskrnl.exe!SeQuerySessionIdToken+0x1b99 ntoskrnl.exe!SeQuerySessionIdToken+0x15f9 ntoskrnl.exe!SeQuerySessionIdToken+0x1440 ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x744e ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x52c4 ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x13c8 ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x10da ntoskrnl.exe!IoDeleteAllDependencyRelations+0x14d0 ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0xa96 ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x898 ntoskrnl.exe!ObReferenceObjectByHandleWithTag+0xe92 ntoskrnl.exe!NtDeviceIoControlFile+0x56 ntoskrnl.exe!setjmpex+0x34b3 ntdll.dll!NtDeviceIoControlFile+0xa KERNELBASE.dll!GetModuleHandleExA+0xb6 KERNEL32.DLL!DeviceIoControl+0x80 cfgmgr32.dll!SwMemFree+0x6a7 KERNELBASE.dll!SetKernelObjectSecurity+0xc1 ntdll.dll!RtlAcquireSRWLockExclusive+0x31e ntdll.dll!RtlMultiByteToUnicodeN+0x20a3 KERNEL32.DLL!BaseThreadInitThunk+0xd ntdll.dll!RtlUserThreadStart+0x1d

นี่เป็นอีกสแต็กจากหนึ่งในหัวข้อเริ่มต้น ( SHCORE.dll!GetScaleFactorForDevice): ntoskrnl.exe!KeSynchronizeExecution+0x2246 ntoskrnl.exe!KeRemoveQueueEx+0x108e ntoskrnl.exe!KeRemoveQueueEx+0xae9 ntoskrnl.exe!KeWaitForSingleObject+0x22a ntoskrnl.exe!KeSetBasePriorityThread+0x4ec ntoskrnl.exe!KeRemoveQueueEx+0x281d ntoskrnl.exe!KiCheckForKernelApcDelivery+0x23 win32k.sys+0x12aaea win32k.sys+0x6d10d win32k.sys+0xca699 win32k.sys+0x35a9f win32k.sys+0x2a514 win32k.sys+0x138e28 win32k.sys+0x19fa8 win32k.sys+0x4921e ntoskrnl.exe!setjmpex+0x34b3 USER32.dll!WindowFromPhysicalPoint+0x1a USER32.dll!CallWindowProcW+0x2bf USER32.dll!SendMessageW+0x111 UxTheme.dll!DrawThemeParentBackgroundEx+0x18f Comctl32.dll!ImageList_GetIconSize+0xee3 Comctl32.dll!ImageList_GetIconSize+0x1107 Comctl32.dll!DrawScrollBar+0x12bf USER32.dll!DispatchMessageW+0x154 USER32.dll!CallWindowProcW+0x132 Comctl32.dll!DefSubclassProc+0xb2 Comctl32.dll!DefSubclassProc+0x77 explorerframe.dll!Ordinal111+0x655d Comctl32.dll!DPA_GetPtr+0x282 Comctl32.dll!DPA_GetPtr+0x152 USER32.dll!DispatchMessageW+0x154 USER32.dll!OffsetRect+0x172 USER32.dll!OffsetRect+0x22d ntdll.dll!KiUserCallbackDispatcher+0x1f USER32.dll!WindowFromPhysicalPoint+0x1a USER32.dll!CallWindowProcW+0x2bf USER32.dll!SendMessageW+0x111 UxTheme.dll!DrawThemeParentBackgroundEx+0x1a6 explorerframe.dll!Ordinal111+0xabef explorerframe.dll!Ordinal111+0x6ae5 USER32.dll!DispatchMessageW+0x154 USER32.dll!OffsetRect+0x172 USER32.dll!OffsetRect+0x22d ntdll.dll!KiUserCallbackDispatcher+0x1f USER32.dll!WindowFromPhysicalPoint+0x1a USER32.dll!CallWindowProcW+0x2bf USER32.dll!SendMessageW+0x111 UxTheme.dll!DrawThemeParentBackgroundEx+0x1a6 explorerframe.dll!Ordinal111+0xaa52 Comctl32.dll!DPA_GetPtr+0x282 Comctl32.dll!DPA_GetPtr+0x152 USER32.dll!GetWindowLongPtrA+0x265 USER32.dll!OffsetRect+0x172 USER32.dll!OffsetRect+0x22d ntdll.dll!KiUserCallbackDispatcher+0x1f USER32.dll!SendMessageW+0x1aa USER32.dll!SendMessageW+0x1bc explorerframe.dll!Ordinal111+0x546e explorerframe.dll!Ordinal111+0x10568 explorerframe.dll!Ordinal111+0x11d50 explorerframe.dll!Ordinal111+0x11d00 explorerframe.dll!Ordinal111+0xeee3 SHELL32.dll!SHGetKnownFolderPathWorker+0x84c SHELL32.dll!SHGetKnownFolderPathWorker+0xa23 SHCORE.dll!GetScaleFactorForDevice+0x333 KERNEL32.DLL!BaseThreadInitThunk+0xd ntdll.dll!RtlUserThreadStart+0x1d

โปรดทราบว่าใช้เวลาประมาณ 30 นิ้วในขณะนี้ - มีเวลาในการติดตั้งสัญลักษณ์อ่านโพสต์ทำการวินิจฉัยและโพสต์กลับและยังมีซีพียูทำงานอยู่

การอัพเดทครั้งที่สองสำหรับสัญลักษณ์

ขอบคุณ @kinokijuf ฉันใช้ Windows Defender Debug.dll และมีข้อมูลที่แม่นยำยิ่งขึ้น เธรดตอนนี้มีลักษณะดังนี้:

ntdll.dll!TppWorkerThread ntdll.dll!TppWorkerThread ntdll.dll!TppWorkerThread ntdll.dll!TppWorkerThread ntdll.dll!TppWorkerThread SHCORE.dll!Microsoft::WRL::FtmBase::MarshalInterface+0x1c SHCORE.dll!Microsoft::WRL::FtmBase::MarshalInterface+0x1c FunDisc.dll!CNotificationQUeue::ThreadProc SHCORE.dll!Microsoft::WRL::FtmBase::MarshalInterface+0x1c windows.immersiveshell.serviceprovicer.dll!CImmersiveShellController::s_ImmersiveShellComponentsThreadProc Explorer.EXE!wWinMainCRTStartup

ในขณะที่เธรดระดับบนสุดยังคงแสดงความขัดแย้งของเธรด / ล็อคอยู่:

ntoskrnl.exe!KiSwapContext+0x76 ntoskrnl.exe!KiSwapThread+0x14e ntoskrnl.exe!KiCommitThreadWait+0x129 ntoskrnl.exe!KeWaitForSingleObject+0x22a ntoskrnl.exe!KiSchedulerApc+0x74 ntoskrnl.exe!KiDeliverApc+0x1fd ntoskrnl.exe!KiSwapThread+0x2da ntoskrnl.exe!KiCommitThreadWait+0x129 ntoskrnl.exe!KeRemoveQueueEx+0x27b ntoskrnl.exe!IoRemoveIoCompletion+0x8a ntoskrnl.exe!NtWaitForWorkViaWorkerFactory+0x30a ntoskrnl.exe!KiSystemServiceCopyEnd+0x13 ntdll.dll!NtWaitForWorkViaWorkerFactory+0xa ntdll.dll!TppWorkerThread+0x286 KERNEL32.DLL!BaseThreadInitThunk+0xd ntdll.dll!RtlUserThreadStart+0x1d

ขอบคุณ


คุณมีสัญลักษณ์โหลดสำหรับทุกสิ่งหรือไม่? ทำให้ฉันดูเหมือนคุณจะไม่
kinokijuf

ฉันจะตรวจสอบสัญลักษณ์ที่ถูกโหลดหรือสิ่งที่ขาดหายไปได้อย่างไร? ขออภัยถ้าคำถามไม่สมเหตุสมผล - ฉันไม่คุ้นเคยกับ Windows internals ...
HerleifC

ไม่เป็นไรคิดดูว่าคุณหมายถึงอะไร ฉันได้ติดตั้งสัญลักษณ์การค้าปลีกสำหรับ windows 8.1 และเครื่องมือชี้กระบวนการ (ตามที่อธิบายในโพสต์นี้ไปแล้ว แต่ผลลัพธ์ก็มีลักษณะเหมือนกันมาก
HerleifC

ดักจับร่องรอย xperf ของการใช้ซีพียูและแชร์ร่องรอย: pastebin.com/pgE11HRD
magicandre1981

คุณไม่มีสัญลักษณ์ Ordinal111กองติดตามที่ถูกต้องจะไม่แสดงการทำงานเช่น
kinokijuf

คำตอบ:


1

ตกลงการใช้งาน CPU มาจากการอ่านรีจิสตรีคีย์จำนวนมากจากMACHINE\SOFTWARE\Classes\DeviceDisplayObject\InterfaceClass\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\DeviceDisplayStatus(การโทรมากกว่า 4,000 ครั้ง)

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเห็นการโทรจำนวนมากไปยังMACHINE\System\ControlSet001\Control\DeviceClasses\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}ที่ที่ฉันเห็นมากกว่า 5700 HarddiskVolumeSnapshot (เช่นREGISTRY\MACHINE\System\ControlSet001\Control\DeviceClasses\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\##?#STORAGE#VolumeSnapshot#HarddiskVolumeSnapshot5753#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\#\Properties)

การเรียกทั้งหมดเหล่านี้ทำให้ Explorer ช้าลง ลองคิดดูว่าทำไมคุณถึงมี Snaphot จำนวนมากและลดจำนวนเพื่อให้ Explorer ทำงานเร็วขึ้น


มีความคิดอะไรบ้างที่ทำให้เกิดการโทรเหล่านี้? สแน็ปช็อตเกิดจากการสำรองข้อมูล - ฉันสามารถลบออกได้ แต่ดูเหมือนถูก สำหรับ{53f..}คลาสอินเตอร์เฟสนั้นดูเหมือนว่าจะเกี่ยวข้องกับอุปกรณ์ USB แต่ฉันไม่ชัดเจนว่าทำไมการโทรจำนวนมาก (หรือลองใหม่) โดยเฉพาะอย่างยิ่งเนื่องจากไม่มีรายการในรีจิสทรี ... ลืมพูดขอบคุณสำหรับความอดทนและเวลาของคุณ จนถึงตอนนี้!
HerleifC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.