Mono app冻结在非阻塞套接字发送

时间:2017-11-24 16:30:28

标签: c# sockets mono

我在debian 9上以mono的形式运行服务器应用程序。大约1000-2000个客户端已连接,并且应用程序经常冻结100%的CPU使用率。我做"杀死-QUIT pid"获取线程堆栈转储并始终坚持这一点:

"<unnamed thread>"  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Net.Sockets.Socket.Send_internal (intptr,byte[],int,int,System.Net.Sockets.SocketFlags,int&,bool) [0x00000] in <2b0d86369d72459baed0cee98a8e578a>:0
  at System.Net.Sockets.Socket.Send_internal (System.Net.Sockets.SafeSocketHandle,byte[],int,int,System.Net.Sockets.SocketFlags,int&,bool) [0x0000c] in <2b0d86369d72459baed0cee98a8e578a>:0
  at System.Net.Sockets.Socket.Send (byte[],int,int,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError&) [0x00021] in <2b0d86369d72459baed0cee98a8e578a>:0

大约10-20分钟后,冻结结束,应用程序恢复。任何想法为什么会发生这种情况以及我能做些什么?

这是一个非阻塞套接字,并且不是常规阻塞调用,因为在此期间CPU使用率始终为100%。

编辑:解决了它。在Socket.Send的单声道实现中有一个无限循环,删除它完全解决了这个问题。

0 个答案:

没有答案