No buffer space available. An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
从研究来看,非分页池和端口似乎是唯一可能导致此错误的资源.是否有其他资源可能导致10055错误?
目前,我们在应用程序上设置了perfmon计数器,在大多数情况下,非页面缓冲池使用率看起来很低.打开TCP连接看起来很低,我不知道另一种监控端口的方法.
由于它只发生在生产中,我们无法使用更多的侵入性计数器.虽然听到其他解决方案仍然很有趣.我相信其他人可以使用这些信息.
是否有一些其他工具或程序可以推荐用于诊断哪个应用程序导致问题?
更新:
该平台是带有/ 3G开关的Windows Server 2003 x86.作为参考,x86通常具有256mb的NPP存储,/ 3G将其降低到128mb.通常,您希望避免此配置以避免NPP问题. (reference)
我们有一个申请来源.我写了相当精细的测试工具,试图重现这种行为无济于事.
如上所述,问题只发生在生产中.因此,避免了分组监视.我们目前有性能计数器设置,可以监控NPP,线程,网络流量等.由于perfmon的间隔是1秒,你可以在该窗口内进出微爆.然而,有一些主观证据表明这不是问题.
基本情况是连接的另一端表示由于10055错误导致代码关闭连接. NPP(和一般性能)在断开连接之前看起来稳定,这表明其他资源是原因.
更新:
我还要重申原始问题与诊断有关,而不是解决方案.关于导致10055错误的原因,我仍然没有明确的答案.检查驱动程序和硬件并重新安装操作系统很棒,但它回避了原来的问题.
更基本的故障排除问题很简单 – 您的生产环境有何不同?
您是否在Windows 2003 x64或Windows 2008中测试过该应用程序?
在问题的第二部分..
以下工具可用于故障排除和修复Winsock错误.
嗅探器:
http://www.wireshark.org/
垫片:
http://www.sstinc.com/winsock.html http://www.win-tech.com/html/socktspy.htm
用于跟踪系统状态和资源的通用工具
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx http://technet.microsoft.com/en-us/sysinternals/bb896645
用于检测API调用的工具
http://www.apimonitor.com/ http://www.nektra.com/products/spystudio-api-monitor/
调试器
http://www.ollydbg.de/ http://www.immunitysec.com/products-immdbg.shtml
反转工具或反编译器
http://www.hex-rays.com/products/ida/index.shtml http://www.hex-rays.com/products/decompiler/index.shtml
您的标准IDE和编译器
http://www.microsoft.com/visualstudio/en-us
以下是其他工具的列表:
http://www.sockets.com/devtools.htm
其他参考文献:
https://stackoverflow.com/questions/8118870/howto-debug-winsock-api-calls
http://brandon.fuller.name/archives/2007/01/24/19.44.29/
http://tangentsoft.net/< ----可能是最好的一个