系统缓冲区空间不足或队列已满,问题原因

乙方提供的程序,调用我方的WEBAPI,过一段时间就会报错。

分析对方程序的数据时,发现了2个问题:1. 对方数据库写库字段对错了,造成主键冲突会写入失败,日均2000的记录,四五年只存了500多条。2. 对方上传数据,运行一段时间会报错,然后就持续性的不能上传数据,重启程序就能恢复。谁也没想到这两个问题是关联的!!!

对方用的labview,报错信息不明确,初步认为是连接没及时释放(对方还怀疑我方的webapi服务有问题),造成的错误,我给对方封装了一个.net的调用的库,运行一段时间后报【系统缓冲区空间不足或队列已满】的错误。

基本能确定是连接数不够用,但我写的库是短连接,即便释放后等待WAITING一段儿时间,netstat 看(同时也发现了真正的问题),基本就维持在4个左右。先扩大了本地的MaxUserPort数,设置为0x8000,貌似没问题了,运行几周后又集体陆续报错了。

查看日志,先出现的是这个报错,确定是本地的连接不够用了。

    Invoke Node System.Reflection.TargetInvocationException: 调用的目标发生了异常。
    Inner Exception: System.AggregateException: 发生一个或多个错误。
    Inner Exception: System.Net.Http.HttpRequestException: 发送请求时出错。
    Inner Exception: System.Net.WebException: 无法连接到远程服务器
    Inner Exception: System.Net.Sockets.SocketException: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 

之后报以下错误

Invoke Node System.Reflection.TargetInvocationException: 调用的目标发生了异常。
    Inner Exception: System.AggregateException: 发生一个或多个错误。
    Inner Exception: System.Net.Http.HttpRequestException: 发送请求时出错。
    Inner Exception: System.Net.WebException: 无法连接到远程服务器
    Inner Exception: System.Net.Sockets.SocketException: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。

在netstat -n查看时,发现还有很多本地连接自己IP打开了1433 ,基本能确定是数据库操作部分持续的开新的长连接,造成系统的端口被占满了。此时改注册表的MaxUserPort,不重启任何程序就能恢复数据上传。

总结:有网络的问题,暂时分析不出来时,就看看netstat,其中或许能发现故障原因。耗尽网络连接的不一定是当前报错的网络连接,也可能是其他进行网络操作的线程出的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值