IOCP调用WSASend挑动Handle增长
IOCP调用WSASend引发Handle增长
Server采用IOCP,在高并发压力下,观察到Handle一直在增长。
使用Windbg的Htrace进行跟踪,发现增长点在:
--------------------------------------
Handle = 0x00000f80 - OPEN
Thread ID = 0x00000d10, Process ID = 0x00001da8
0x773e469c: ntdll!ZwCreateEvent+0x0000000c
0x74de2420: mswsock!MSAFD_SockThreadInitialize+0x0000001b
0x74de24a1: mswsock!SockEnterApiSlow+0x0000003c
0x74de4b77: mswsock!WSPSend+0x00000085
0x76ec6920: WS2_32!WSASend+0x0000007b
0x7307acc1: rython_kernel!CIOCPServer::IOCPWritePost+0x00000091
---------------------------------------
Handle = 0x00000f7c - OPEN
Thread ID = 0x00000d10, Process ID = 0x00001da8
0x773e498c: ntdll!NtDuplicateObject+0x0000000c
0x755c77ed: KERNELBASE!DuplicateHandle+0x00000069
0x77540662: kernel32!DuplicateHandleImplementation+0x000000b3
0x76ec35ae: WS2_32!WahOpenCurrentThread+0x00000047
0x76ec3558: WS2_32!DTHREAD::Initialize+0x0000002d
0x76ec34ca: WS2_32!DTHREAD::CreateDThreadForCurrentThread+0x0000003c
0x76ec35de: WS2_32!Prolog_v2+0x00000035
0x76ec3385: WS2_32!SlowPrologOvlp+0x00000012
0x76ec4aa2: WS2_32!WSASend+0x0000003f
--------------------------------------
不知道什么原因导致的?请大牛指点。
------解决方案--------------------
WSASend本身不会引发句柄增长,可能是封装库的问题。
------解决方案--------------------
锁定了太多非分页内存??
------解决方案--------------------
如果是具名的对象,那么用procexp查看一下句柄名字就知道了
------解决方案--------------------
楼主可以看看你的服务器程序中有没有哪些地方创建句柄,但是没有close
Server采用IOCP,在高并发压力下,观察到Handle一直在增长。
使用Windbg的Htrace进行跟踪,发现增长点在:
--------------------------------------
Handle = 0x00000f80 - OPEN
Thread ID = 0x00000d10, Process ID = 0x00001da8
0x773e469c: ntdll!ZwCreateEvent+0x0000000c
0x74de2420: mswsock!MSAFD_SockThreadInitialize+0x0000001b
0x74de24a1: mswsock!SockEnterApiSlow+0x0000003c
0x74de4b77: mswsock!WSPSend+0x00000085
0x76ec6920: WS2_32!WSASend+0x0000007b
0x7307acc1: rython_kernel!CIOCPServer::IOCPWritePost+0x00000091
---------------------------------------
Handle = 0x00000f7c - OPEN
Thread ID = 0x00000d10, Process ID = 0x00001da8
0x773e498c: ntdll!NtDuplicateObject+0x0000000c
0x755c77ed: KERNELBASE!DuplicateHandle+0x00000069
0x77540662: kernel32!DuplicateHandleImplementation+0x000000b3
0x76ec35ae: WS2_32!WahOpenCurrentThread+0x00000047
0x76ec3558: WS2_32!DTHREAD::Initialize+0x0000002d
0x76ec34ca: WS2_32!DTHREAD::CreateDThreadForCurrentThread+0x0000003c
0x76ec35de: WS2_32!Prolog_v2+0x00000035
0x76ec3385: WS2_32!SlowPrologOvlp+0x00000012
0x76ec4aa2: WS2_32!WSASend+0x0000003f
--------------------------------------
不知道什么原因导致的?请大牛指点。
------解决方案--------------------
WSASend本身不会引发句柄增长,可能是封装库的问题。
------解决方案--------------------
锁定了太多非分页内存??
------解决方案--------------------
如果是具名的对象,那么用procexp查看一下句柄名字就知道了
------解决方案--------------------
楼主可以看看你的服务器程序中有没有哪些地方创建句柄,但是没有close