t窗体程序,在windows server 2012 下 TCP并发连接是否有限制?

he_hawk 2020-05-21 08:18:05
一个C#写的窗体程序,运行在一个服务器(服务器A)windows server2012 r2 stand下出现问题。
问题现象有三个:
1、我的程序同时要访问830个TCP设备(设备当服务),同时设备的数据要实时入库,此时会有很多设备连异常,数据收发也存成严重组包的情况,正常收发一个数据是20字节以内,延迟组包(估计是因为延迟TCP或系统将多个包组合在一起)后,有时接收到超过1024字节的数据,还经常超时断开连接,但用其它工具连接设备端收发正常;

2、我的程序同时提供一个TCP服务监听,用客户端工具能连接到服务端,但客户端发送的数据客户端收不到;

3、我的程序订阅其它机器的MQTT主题(也是TCP连接),别人在对应的主题下发布信息,我的程序收不到。

请问这应该是什么原因导致的呢?

================

自己测试只访问300个以内的设备,各种服务都相当正常,访问400个设备时,就可能出现上述问题,同时访问830个设备,上述问题2、3是一定出现。

但此时用TCP工具建立服务端,TCP工具的客户端还能连接上,能正常收发数据。

系统自带的性能监测工具中,在网络下的TCP连接数据,图是满绿色的,数值是10

============
我们另一个服务器B,性能监测工具 网络下的TCP连接数尽然是500,B服务器目前监测的168个设备,TCP服务正常,B服务器CPU使用5%,内存使用9% 。统计TCP建立的连接数是 305 (用的统计命令 netstat -ano|find "ESTABLISHED" /c )

B服务器监测830个设备也会出现上述问题。 性能监测工具 网络下的TCP连接数也变成是10(看来这个就是图表比例值,不是TCP连接数)服务器CPU使用20%,内存使用10% 。统计TCP建立的连接数是 920-990 (用的统计命令 netstat -ano|find "ESTABLISHED" /c ) 统计的连接数总在变


前述提问服务器A(暂称为A服务器),监测830个设备时,系统资源也够用,系统CPU使用28%,内存使用30%

在微软技术支持发帖没有回复。
https://social.technet.microsoft.com/Forums/zh-CN/56fff082-0221-4663-8e1f-9d63911a5d61/1996820010net31383203076529222312windows-server-2012-19979?forum=winserver8
...全文
1101 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
泉低调前行 2020-05-26
  • 打赏
  • 举报
回复
引用 12 楼 sichuanwww 的回复:
UDP考虑过吗?
版主都结帖了 !应该解决了
sichuanwww 2020-05-25
  • 打赏
  • 举报
回复
UDP考虑过吗?
  • 打赏
  • 举报
回复
如果异步处理还解决不了可以尝试分多个端口接收
  • 打赏
  • 举报
回复
引用 9 楼 he_hawk 的回复:
830个设备,是长连接 长连接,在接收端处理了TCP组合包的数据,及时处理完基本没有发现组合数据包的情况 830个设备,一秒内可能有10多次20字节左右的数据(830设备 终端,终端下有具体设备,实时监测,数据变化就上报)
1、注意通信线程和业务处理分离。通信只管通信,数据的业务处理交给业务处理模块 2、830个长连接按说还好,数据量按每秒830*10个数据包,也就是说你的业务处理模块处理能力需要达到8300笔/秒,要看处理过程是否有io等操作,如果涉及到的话,单机处理压力还是不小的。需要根据实际情况实际分析。
he_hawk 2020-05-22
  • 打赏
  • 举报
回复
830个设备,是长连接 长连接,在接收端处理了TCP组合包的数据,及时处理完基本没有发现组合数据包的情况 830个设备,一秒内可能有10多次20字节左右的数据(830设备 终端,终端下有具体设备,实时监测,数据变化就上报)
he_hawk 2020-05-22
  • 打赏
  • 举报
回复
想要处理及时,然后固定的开线程太多,造成内存泄漏(实际内存够,占用200多M),异常使用线程池,发现内存是不停的上涨,所以采用固定线程,但现在设备太多,线程太多,然后出现内存泄漏。
he_hawk 2020-05-22
  • 打赏
  • 举报
回复
830个设备,长连接,接收处理1秒完成不了,异步处理 BeginReceive,BeginSend这种收发,
引用 6 楼 泉低调前行 的回复:
[quote=引用 5 楼 失足成万古风流人物 的回复:] [quote=引用 4 楼 泉低调前行 的回复:] 看来楼主发现自己问题了!希望楼主解决问题后分享经验
出现另一个问题时,还会回来滴[/quote] 可以的哥!静静等分享[/quote] 确实如大神说的,出另一个问题了。 这个主题的问题就是按你说的方式,没处理及时,造成网络拥堵了。
泉低调前行 2020-05-22
  • 打赏
  • 举报
回复
引用 5 楼 失足成万古风流人物 的回复:
[quote=引用 4 楼 泉低调前行 的回复:] 看来楼主发现自己问题了!希望楼主解决问题后分享经验
出现另一个问题时,还会回来滴[/quote] 可以的哥!静静等分享
  • 打赏
  • 举报
回复
引用 4 楼 泉低调前行 的回复:
看来楼主发现自己问题了!希望楼主解决问题后分享经验
出现另一个问题时,还会回来滴
泉低调前行 2020-05-22
  • 打赏
  • 举报
回复
看来楼主发现自己问题了!希望楼主解决问题后分享经验
threenewbee 2020-05-21
  • 打赏
  • 举报
回复
本身tcp没有限制,但是你这种同时保持800多连接还要实时性还有组包,代码本身存在问题的几率很大。
dmankill 2020-05-21
  • 打赏
  • 举报
回复
用tcp写东西就要注意粘包,要根据数据协议来分包
  • 打赏
  • 举报
回复
830个设备,长连接还是短连接? 长连接有没有处理粘包问题? 830个设备,一秒内会有多少数据上来? 你的程序1秒内能否处理完所有数据?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧