zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/unqiang/p/4372656.html
Copyright © 2011-2022 走看看