• Erlang的系统限制


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

    1、进程数量

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

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. C:>erl  
    2. Eshell V5.10.2  (abort with ^G)  
    3. 1> erlang:system_info(process_limit).  
    4. 262144  

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. C:>erl +P 1000000  
    2. Eshell V5.10.2  (abort with ^G)  
    3. 1> erlang:system_info(process_limit).  
    4. 1048576  

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

    2、分布式节点数量

    节点名称限制:

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

    节点连接限制:

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

    3、atom的最大数量

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

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. C:>erl +t 1024  
    2. Eshell V5.10.2  (abort with ^G)  

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

    一个atom最多能有255个字符

    5、ets表的数量限制

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. C:>erl +e 2000  
    2. Eshell V5.10.2  (abort with ^G)  [plain] view plaincopy在CODE上查看代码片派生到我的代码片

    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。

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. C:>erl  
    2. Eshell V5.10.2  (abort with ^G)  
    3. 1> erlang:system_info(port_limit).  
    4. 8192  

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. C:>erl +Q 10000  
    2. Eshell V5.10.2  (abort with ^G)  
    3. 1> erlang:system_info(port_limit).  
    4. 16384  

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

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

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

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

    255

    12、dets表存储限制

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

     

    参考

    http://blog.csdn.net/mycwq/article/details/17474211

    http://www.erlang.org/doc/efficiency_guide/advanced.html#id69282
    http://www.erlang.org/doc/man/erl.html#id162456

     

  • 相关阅读:
    阿里云盘上线了,使用中,1T空间,不限速(似乎)!
    在互联网大厂实习,虽然转正了,但编程能力很差,要主动离职吗?
    软件外包商都是黑心的吗?
    招聘信息薪资范围是12-20K,能否要20K的薪资?
    为何没有中文编程?
    为什么银行的IT部门都远离市区?
    想花钱速学互联网行业,大概花两三个月的时间,出来好找工作吗
    Java基础总结,超级全的面试题
    一套基于java的开源车牌识别算法
    Java 最常见的 208 道面试题(第八模块答案)网络
  • 原文地址:https://www.cnblogs.com/unqiang/p/4372656.html
Copyright © 2020-2023  润新知