程序运行CPU过高,线程调用堆栈如下,版本为3.4.5,可以定位到哪个函数吗

xiguoxing 发布于 2016/10/26 12:42
阅读 621
收藏 0
ntdll.dll!NtDelayExecution+0xa
ntdll.dll!NtDelayExecution+0xa
KERNELBASE.dll!SleepEx+0xaa
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x49d5
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x6e8c
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x6bc5
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x8323
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x81bd
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x10863
HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x108f7
KERNEL32.dll!BaseThreadInitThunk+0x22
ntdll.dll!RtlUserThreadStart+0x34
加载中
0
初大米
初大米

猜测:

是不是线程数量过多或者锁死了?

是C#程序吗?

x
xiguoxing
怎么来定位HPSocket4C_U.dll!SYS_GetSocketLocalAddress+0x49d5调用函数呀
0
L5_Railgun
L5_Railgun

SleepEx的话,一般应该是在等io完成例程被触发,比如说ReadFileEx这玩意。但是如果这个线程占用CPU过高,SleepEx应该是没有挂起当前线程的,而且线程有大量IO,且频繁的user/kernel模式切换,就会导致cpu占用过高

你用windbg设置下pdb,attach你的进程,用~tid切换到这个线程,然后kb一下就可以看到完整的函数call stack了

0
伤神小怪兽
伤神小怪兽
你这个问题好奇怪,可以进群来详细讲讲。
返回顶部
顶部