首页 新闻 会员 周边 捐助

远程主机强迫关闭了一个现有的连接...

0
悬赏园豆:180 [已关闭问题] 解决于 2014-04-11 11:40

已知:

  .net下的 一个 Wintellect.Threading 框架的TCP服务(32位程序);

  服务器OS是win2003;

  交换机是 CISCO WS-C2960S-48TD-L;(千兆以太网交换机)

  多台PC上开模拟终端,模拟上万终端TCP连接收发数据包 

 

症状和问题:

  在达到某连接数后,新建立的连接会直接断开,错误提示如下两条:

    "无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。"
    "无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。"

  之前建立的连接正常收发包。

   错误代码定位到:System.Net.Sockets.TcpListener类下的EndAcceptTcpClient()方法。

 

补充描述:

  模拟终端和服务端同时提示以上错误,应该不是模拟终端问题。

  之前觉得百兆交换机影响,年前换成了千兆的,却没什么大的提升;

  服务器硬件应该是千兆网卡,但win2003在VMware 虚拟机内,所以提示100Mbps,但使用率从没超过1%还是0.1%。如图

 

很详细的啰嗦描述:

  0、cpu/内存/线程数 都不高,比如某时刻值: CPU 13%,线程数51,内存859696k

  1、如果不发数据包,只建立TCP连接,测试能到2W,甚至更大都没有问题(没有进行更大连接测试)。

  2、收发数据包,到1W都正常,再增加模拟终端数量就报如上错误。

  3、尝试加长和缩短数据包大小,最大TCP连接数有反比变化,但很小。(不清楚交换机怎么分包转发的)

  4、个人猜测,数据包在某个环节处理不过来引起的问题。但我程序任何资源的占用都不高。所以一直怀疑是网络交换机。另外是否操作系统某些设置也影响,或者虚拟机也影响。

~~~~~

求园友们给个解答,或者说个 比较明确的下一步测试计划。真不知道QQ和网游怎么就能达到那么多连接数(QQ是udp,但网游应该是TCP吧)。

~~~~~~~

只有这么多豆豆了。。。。。。

 

    

北落师门α的主页 北落师门α | 初学一级 | 园豆:17
提问于:2014-02-07 18:05
< >
分享
其他回答(2)
0

为什么不用Windows Server 2012测试一下?

收获园豆:45
dudu | 园豆:30778 (高人七级) | 2014-02-07 20:54

~~~~我这边没这样的环境。。。

似乎~这样说也可以哦,如果用2012测试什么都满足了,让客户重新配台机器,也行哦。。。

 

~我想着下一步在服务器硬件上直接装win2003系统,不用虚拟机试试。估计也得折腾一周。

支持(0) 反对(1) 北落师门α | 园豆:17 (初学一级) | 2014-02-07 22:27

@打醋的: 支持在服务器硬件上直接装win2003系统,虚拟机的处理性能还是有差别的

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2014-02-07 22:31

@dudu: 嗯。打算明天跟BOSS商量下,没有更好的方案就试试看。尽力折腾吧~~

支持(0) 反对(0) 北落师门α | 园豆:17 (初学一级) | 2014-02-07 22:34
0

锁冲突也会报这个错误的

收获园豆:45
迈客封 | 园豆:247 (菜鸟二级) | 2014-02-08 13:31

能说详细点么?TCP连接都单对单的,怎么会出现锁冲突...

支持(0) 反对(0) 北落师门α | 园豆:17 (初学一级) | 2014-02-08 13:52

@打醋的: 你访问数据库了么,我指的是数据库死锁

支持(0) 反对(0) 迈客封 | 园豆:247 (菜鸟二级) | 2014-02-08 13:54

@迈客封: 哦。。是访问库了,但是只很少一点库操作。

错误代码定位到:System.Net.Sockets.TcpListener类下的EndAcceptTcpClient()方法。

这是.net框架自己的方法报出的错误了。跟库应该没关系吧。

支持(0) 反对(0) 北落师门α | 园豆:17 (初学一级) | 2014-02-08 13:58
0

我不清楚你的问题是否出现在资源抢占,但Thread和TCP Socketd都是有数量限制的,个人不建议长时间保持Socket连接,可以尝试采用需要时连接,操作完毕后关闭连接,另外用心跳包的形式来确定连接的可能性

收获园豆:45
Gavin·张立 | 园豆:250 (菜鸟二级) | 2014-02-10 16:45

使用心跳包了。

最大线程数 ,单程序是1000,我使用的异步,线程数没有超出1000,一般在200以下。

TCP连接数量的限制不知道。

这边需要的就是长时间保持socket连接。如果是需要时连接,那为什么不用udp呢?

支持(0) 反对(0) 北落师门α | 园豆:17 (初学一级) | 2014-02-10 18:11

@打醋的: udp是广播

支持(0) 反对(0) Gavin·张立 | 园豆:250 (菜鸟二级) | 2014-02-13 13:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册