总结Erlang的系统限制

本文详细解析了Erlang编程语言在进程数量、分布式节点、atom最大数量、ETS表数量、tuple元素数量、binary数据大小、端口数量、文件和socket数量、函数参数限制、dets表存储限制等关键方面的限制及其原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制。

1、进程数量

缺省情况下同时存在的最大Erlang进程数量不超过2^18=262144个,最大值为2^27-1=134217727,是由于内存的限制在32位环境中这个数量不太可能达到。有效范围是1024-134217727。

怎么知道实际中使用进程限制?

C:\>erl
Eshell V5.10.2  (abort with ^G)
1> erlang:system_info(process_limit).
262144
通过配置erlang启动参数(标志+P)可以改变进程数量限制

C:\>erl +P 1000000
Eshell V5.10.2  (abort with ^G)
1> erlang:system_info(process_limit).
1048576
注意了,erlang实际使用的进程数量限制可能比你设置的要大得多,这是因为erlang运行系统选择的进程数量限制通常是2的幂。

2、分布式节点数量

节点名称限制:

一个节点的远程节点的最大数目是由可用于节点名称atom的最大数目的限制,换句话说,节点名称限制数量取决于atom的最大数量。另外,节点名称长度也和atom有关,不能超过255个字符。

节点连接限制:

能够同时连接的最大节点数是由节点名称限制,可用端口限制,或者可用socket限制共同决定。

3、atom的最大数量

设置erlang系统最大能够处理的原子(atom)数量,默认是1048576

通过配置erlang启动参数(标志+t)可以改变进程数量限制

C:\>erl +t 1024
Eshell V5.10.2  (abort with ^G)

4、一个atom的字符个数限制

一个atom最多能有255个字符

5、ets表的数量限制

默认值是1400,可以通过环境变量ERL_MAX_ETS_TABLES修改,或者配置erlang启动参数(标志+e)

C:\>erl +e 2000
Eshell V5.10.2  (abort with ^G)

/********  无情的分割线 ********* /  
  作者:没有开花的树  
  博客:blog.youkuaiyun.com/mycwq  
/ *******   无情的copy  *********/ 

6、一个tuple中最大元素数量

2^26=67108863个,事实上,由于可用内存的限制一般很难达到这个数量

7、二进制数据(binary)的大小限制

32位机器上最大不超过 2^29-1 =536870911个字节

64位机器上最大不超过 2^61-1 = 2305843009213693951个字节

如果超出限制,erlang位语法(bit syntax)将无法工作,直接抛出system_limit异常。

8、一个Erlang节点最大分配的数据空间大小

Erlang运行时系统可以使用到32(或64)位地址空间,事实上,操作系统对单个进程的使用空间做了限制。

9、同时打开的端口数量限制(Open ports)

erlang对同时打开的端口数量做出了限制。默认是65536,Windows下是8096。有效值范围是1024-134217727。

C:\>erl
Eshell V5.10.2  (abort with ^G)
1> erlang:system_info(port_limit).
8192

可以通过环境变量ERL_MAX_PORTS修改,或者配置erlang启动参数(标志+Q)修改

C:\>erl +Q 10000
Eshell V5.10.2  (abort with ^G)
1> erlang:system_info(port_limit).
16384

注意了,erlang实际使用的端口数量限制可能比你设置的要大得多,这是因为erlang运行系统选择的端口数量限制通常是2的幂。

10、同时打开的文件和socket数量限制

能同时打开的最大文件和socket数量取决于最大能打开的端口数量,以及操作系统的设定和限制

11、函数的参数个数限制(包括匿名函数)

255

12、dets表存储限制

单个dets文件大小不能超过2G,在64位的系统也有此限制,mnesia也受到这个限制


参考

http://blog.youkuaiyun.com/mycwq/article/details/17474211
http://www.erlang.org/doc/efficiency_guide/advanced.html#id69282
http://www.erlang.org/doc/man/erl.html#id162456

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值