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

1、进程数量

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

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

  1. C:\>erl
  2. Eshell V5.10.2  (abort with ^G)
  3. 1> erlang:system_info(process_limit).
  4. 262144

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

  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)数量,默认是1048576

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

  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)

  1. C:\>erl +e 2000
  2. Eshell V5.10.2  (abort with ^G)
  1. /********  无情的分割线 ********* /
  2. 作者:没有开花的树
  3. 博客:blog.csdn.net/mycwq
  4. / *******   无情的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。

  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)修改

  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也受到这个限制

[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下查看yun rpm dpkg 软件是否安装成功的方法

    因为Linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了. 总结起来就是这样几类: 一.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -q ...

  2. oracle无监听程序的解决方法(PLSQL)Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务

    \PLSQL\instantclient_11_2 listener.ora # listener.ora Network Configuration File: E:\software\PLSQL\ ...

  3. 自己实现一个shell

    用C实现一个简单的交互式shell,要求:当用户输入一行命令时,识别程序名和参数并调用适当的exec函数执行程序,等待执行完成后给出提示符. exec函数实际上是六种以exec开头的函数,统称exec ...

  4. pandas筛选数据。

    https://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html 假如我们想要筛选D列数据中大于0的行:df[df['D']>0] ...

  5. 关于Socket通讯中的Close_wait状态

    关于Socket通讯中的Close_wait状态 文/转 编辑 编者按:使用Socket通讯,有时我们查看端口状态的时候,经常会发现Socket处于close_wait状态,从而影响系统性能,此文或许 ...

  6. JavaScript中setInterval的用法总结

    setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象.可以使用本动作更新来自数据库的变量或更新时间显示. setInterval动作的语法格式如下:setInterva ...

  7. 浅谈Object.create

    在网上发现了Object.create的用法,感觉很是奇怪,所以学习记录下 var o = Object.create(null); console.log(o); // {} o.name = 'j ...

  8. [原创]VMware Workstation 14.1.3 Pro安装CentOS_7.6.1810

    前言 Linux作为最主流的服务器操作系统,在市场上的使用占比保持着领先对位.其中CentOS作为基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本,在企业的服务器中,也 ...

  9. 2018牛客多校1 - J Different Integers 莫队/主席树签到

    题意:给出n<5e4,a[1...n],单次1e5总次1e6次查询除去区间(L,R)的数的个数 开场5分钟:莫队是不可能莫队的,这道题是不可能莫队的 最后1小时:真香 具体操作没啥特别的,注意一 ...

  10. [Java基础]-- Java GC 垃圾回收器的分类和优缺点

    https://blog.csdn.net/high2011/article/details/80177473?utm_source=blogxgwz2 参考:elasticsearch实战-使用G1 ...