我正在创建一个单声道聊天服务器,它应该能够打开许多套接字。在决定架构之前,我正在使用单声道进行负载测试。只是为了测试,我创建了一个小型单服务器和单服务器,可以打开 100,000 个套接字/连接,并且运行良好。
我试图达到极限,有时进程崩溃(当然)。但让我担心的是,如果我尝试重新启动进程,它会直接给出“未处理的异常:System.Net.Sockets.SocketException:打开的文件太多”。
所以我猜想文件描述(套接字)以某种方式保持打开,即使我的进程结束。即使几个小时后它仍然会出现此错误,我可以处理它的唯一方法是重新启动我的计算机。如果我们在生产中不知道如何处理它,我们就不会遇到这种问题。
我的问题: 无论启动哪个单声道应用程序,Mono 中是否有任何东西可以在全球范围内持续运行,一种我可以在不重新启动计算机的情况下重新启动的服务?或者这不是单声道问题而是 unix 问题,即使我们用 java/C++ 编程也会遇到这种问题?
我检查了以下内容,但没有单进程活着,没有打开套接字,也没有文件:
localhost:~ root# ps -ax | grep mono
1536 ttys002 0:00.00 grep mono
-
localhost:~ root# lsof | grep mono
(nothing)
-
localhost:~ root# netstat -a
Active Internet connections (including servers)
(no unusual ports are open)
对于开发,我在 OSX 10.7.5 下运行。对于生产,我们可以决定使用哪个平台。