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

时间:2010-01-24 10:04:31

标签: 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多个连接来测试Yaws的并发性是不是很傻?

感谢。

3 个答案:

答案 0 :(得分:6)

您似乎遇到系统限制,尝试使用

增加打开文件的最大数量
$ ulimit -n 500

Python on Snow Leopard, how to open >255 sockets?

Erlang本身的限制为1024:

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

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

编辑:

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

答案 1 :(得分:3)

Erlang效率指南中报告了所有Erlang系统限制:

http://erlang.org/doc/efficiency_guide/advanced.html#id2265856

开放端口部分阅读:

  

最大同时数   打开Erlang端口默认为1024。   这个限制最多可以提高   268435456在启动时(参见环境   erlang中的变量ERL_MAX_PORTS(3))   最高限额为268435456   端口至少在32位上   建筑是不可能达到的   由于内存不足。

答案 2 :(得分:0)

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

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

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