Erlang同时开放端口的最大数量?

cko*_*acs 9 erlang tcp yaws

erlang TCP/IP库是否有一些限制?我做了一些搜索,但找不到任何确定的答案.

我已将ERL_MAX_PORTS环境变量设置为12000并将Yaws配置为使用无限制连接.

我编写了一个简单的客户端应用程序,它连接到我为Yaws编写的appmod,并且正在通过同时启动X个客户端来测试同时连接的数量.

我发现当我到达大约100个客户端时,Yaws服务器停止接受更多的TCP连接和客户端错误

Error in process  with exit value: {{badmatch,{error,socket_closed_remotely}}

我知道开放式同时连接的数量必须有限制,但100似乎非常低.我查看了所有的雅司文档,并删除了任何连接限制.

这是运行Snow Leopard的2.16Ghz Intel Core 2 Duo iMac.

对Vista机器的快速测试表明,我在大约300个连接处遇到了同样的问题.

我的考试不合理吗?也就是说同时打开100多个连接来测试雅虎的并发性是愚蠢的吗?

谢谢.

sta*_*ker 6

您似乎遇到了系统限制,尝试使用增加打开文件的最大数量

$ ulimit -n 500
Run Code Online (Sandbox Code Playgroud)

Snow Leopard上的Python,如何打开> 255个套接字?

Erlang本身的限制为1024:

来自http://www.erlang.org/doc/man/erlang.html

默认情况下,可以同时打开的最大端口数为1024,但可以通过环境变量ERL_MAX_PORTS进行配置.

编辑:

系统调用listen() 有一个参数backlog,它确定可以排队的请求数,请检查建立连接的请求之间的延迟是否有帮助.这可能是你的问题.


cko*_*acs 0

在尝试了每个人的建议并搜索了 Erlang 文档之后,我得出的结论是,我的问题是 Yaws 无法跟上负载。

在同一台机器上,Apache Http Components Web 服务器(非阻塞 I/O)在处理相同阈值的连接时不会出现相同的问题。

感谢你的帮助。我将转向其他基于 erlang 的 Web 服务器,例如 Mochiweb。