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

1、进程数量

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

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

[plain] view plaincopy

 
  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

 
  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

 
  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

 
  1. C:\>erl +e 2000
  2. Eshell V5.10.2  (abort with ^G)  [plain] view plaincopy

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

 
  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

 
  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

Erlang的系统限制的更多相关文章

  1. [Erlang]各种系统限制总结

    Erlang本身对进程数,原子长度等没有限制,但为了提高性能和节省内存,总会在实际实现中和运行环境中作出一些限制. 1.进程数量 缺省情况下同时存在的最大Erlang进程数量不超过2^18=26214 ...

  2. [Erlang 0126] 我们读过的Erlang论文

    我在Erlang Resources 豆瓣小站上发起了一个征集活动 [链接] ,"[征集] 我们读过的Erlang论文",希望大家来参加.发起这样一个活动的目的是因为Erlang相 ...

  3. Erlang 104 OTP

    笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-12-21 A Outline, 1 A ...

  4. Erlang 内存泄漏分析

    随着项目越来越依赖Erlang,碰到的问题也随之增加.前段时间线上系统碰到内存高消耗问题,记录一下troubleshooting的分析过程.线上系统用的是Erlang R16B02版本. 问题描述 有 ...

  5. Erlang generic standard behaviours -- gen_server module

    在分析完gen module (http://www.cnblogs.com/--00/p/4271386.html)之后,就可以开始进入gen_server 的主体module 了.gen_serv ...

  6. Erlang虚拟机的启动

    Erlang虚拟机的启动 erl实际上是一个shell脚本,设置几个环境变量之后,调用执行erlexec.erlexec的入口点在 otp_src_R15B01/erts/etc/common/erl ...

  7. Erlang游戏服设计总结

    这主要是一年多来,个人从事Erlang游戏服开发中对一些事情的思考. 想到哪说到哪,没有条理可言. 欢迎讨论. 通常Erlang游戏服务的设计涉及到的东东包括如下: 任务系统 活动系统 公会系统 玩法 ...

  8. Erlang的调度原理(译文)

    原文 http://jlouisramblings.blogspot.com/2013/01/how-erlang-does-scheduling.html 免爬墙链接 http://www.diku ...

  9. erl_0021 erlang和java的内存模型比较(引用)

    原文  http://deepinmind.iteye.com/blog/2030390 我读到一篇相当相当有趣的关于Erlang VM内存管理策略的文章.它是Jesper Wilhelmsson写的 ...

随机推荐

  1. linux 下 多进程与多线程

    [Linux]多进程与多线程之间的区别 http://blog.csdn.net/byrsongqq/article/details/6339240 网络编程中设计并发服务器,使用多进程与多线程 ,请 ...

  2. 定时执行rsync同步数据以及mysql备份

    需求:把机器A中的附件.图片等,备份到备份机B中.将数据库进行备份 附件备份 在A中,启动rsync服务,编辑/etc/xinetd.d/rsync文件,将其中的disable=yes改为disabl ...

  3. HDU 2767.Proving Equivalences-强连通图(有向图)+缩点

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. ELK最佳实践

    1.ELK最佳实践解析 a.用户通过nginx或haproxy访问ELK日志统计平台,IP地址为keepalived的vip地址; b.nginx将请求转发到kibana; c.kibana到es获取 ...

  5. 【java】StringBuilder的三种清除方法对比

    参考链接:https://blog.csdn.net/roserose0002/article/details/6972391

  6. newlisp HTTP Basic Authentication

    HTTP Basic Authentication原来很easy,參考文档:http://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E ...

  7. 2017.2.21 activiti实战--第十三章--流量数据查询与跟踪(一)查询接口介绍及运行时数据查询

    学习资料:<Activiti实战> 第十三章 流量数据查询与跟踪 本章讲解运行时与历史数据的查询方法.主要包含三种:标准查询,Native查询,CustomSql查询. 13.1 Quer ...

  8. CocoaAsyncSocket使用笔记

    先去github的站点下载最新的包,然后先看看介绍. 写的比較具体了 https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAs ...

  9. struts2注解总结----@Action和@Result

    除了使用配置文件配置之外,还能够使用注解来配置 以下是一些经常使用的注解 介绍: @Action/@Actions: @Action指定一个类为action,相应配置文件里的<action> ...

  10. mongodb读写分离的一些选项的理解

    默认情况下 驱动程序会将所有的请求路由到主节点 这通常也是你需要的 但是也可以通过设置驱动程序的读取首选项(read preferences)配置其他选项 可以在读选项中设置需要将查询路由到的服务器的 ...