这似乎与编程有关,但这是一个操作系统问题。
我正在编写一个小型高性能守护进程,每秒需要数千个连接。它在 Linux 上运行良好(特别是 EC2 上的 Ubuntu 9.10)。在 Mac OS X 上,如果我在一个基准测试中抛出几千个连接(大约 16350 个),它只是打开一个连接,做它的事情并关闭连接,然后基准程序挂起几秒钟等待套接字变为可用在继续之前(或在过程中超时)。
我同时使用了 Apache Bench 和 Siege(以确保它不是基准应用程序)。
那么为什么/如何 Mac OS X 限制可以使用套接字的速率,我可以阻止它这样做吗?
还是有其他事情发生?
我知道有一个文件描述符限制,但我没有达到那个限制。接受套接字没有错误,它只是在第一个(大约)16000 之后挂起一段时间,等待 - 我假设 - 操作系统释放套接字。这不应该发生,因为此时所有先前的套接字都已关闭。它们应该以关闭的速度提供,并在 Ubuntu 上提供,但在 Mac OS X 上似乎存在某种多(5-10?)秒的延迟。
我尝试使用 ulimit 进行调整。纳达。