`
cwqcwk1
  • 浏览: 89216 次
文章分类
社区版块
存档分类
最新评论

总结Erlang的系统限制

 
阅读更多

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.csdn.net/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.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开发工具、erlang编辑器

    总结来说,二郎助手是Erlang开发者的理想伙伴,它集成了许多实用的功能,提高了Erlang开发的便捷性和效率。同时,它的开源性质也促进了社区的交流和创新,为Erlang生态系统的繁荣做出了贡献。如果你是Erlang的爱好者...

    xp系统可安装运行的rabbitmq和erlang

    总结,尽管Windows XP系统已经过时,但通过选择合适的Erlang和RabbitMQ版本,以及正确配置和管理,依然可以在这种环境下运行这些工具。然而,强烈建议升级到更新的操作系统以获得更好的安全性和性能。

    erlang-rabbitmq配套安装.zip

    总结,这个名为“erlang-rabbitmq配套安装.zip”的压缩包可能包含了安装 Erlang 和 RabbitMQ 的脚本或指南,帮助用户快速在 Linux 系统上部署这套消息队列系统。通过理解上述步骤,你将能够独立完成安装过程,并开始...

    erts erlang api

    ### Erlang运行时系统应用(ERTS):匹配规格与API概述 #### 一、Erlang运行时系统应用(ERTS) Erlang运行时系统应用(ERTS)是Erlang语言的核心组成部分之一,它负责管理和执行Erlang程序。ERTS包括了进程调度、...

    Python-Ecache是一个基于erlangnifleveldbprotobuf构建的轻量级高效没有容量限制的本地磁盘缓存系统

    总结,Ecache是Python开发者在处理大量数据时的一个强大工具,通过结合Erlang NIF、LevelDB和protobuf的优势,实现了轻量级、高效的本地磁盘缓存解决方案。其无容量限制的设计和丰富的功能使其在各种数据密集型应用...

    Erlang中执行linux命令的两种方法

    总结来说,`os:cmd/1`适合执行简单命令并获取标准输出,而`erlang:open_port/2`则适用于更复杂的场景,如需要错误信息、退出状态码或者控制进程交互。选择哪种方法取决于你的具体需求和对性能的影响。

    歧管:快速批消息在ErlangElixir的节点之间传递

    在分布式系统设计中,消息传递是关键组成部分,特别是在Erlang和Elixir这样的并发和分布式编程语言中。本文将深入探讨“歧管”(Manifold)这一概念,它旨在优化Erlang和Elixir节点之间的批量消息传递,提高性能。 ...

    RabbitMQ3.8.3及相关依赖

    首先,安装RabbitMQ前,确保您的Linux系统是基于Erlang语言运行的,因为RabbitMQ就是用Erlang编写的。Erlang是一种并发和分布式系统设计的语言,具有内置的错误恢复和容错机制,非常适合构建像消息队列这样的高可用...

    RabbitMQ.tar.gz

    在本压缩包“RabbitMQ.tar.gz”中,包含了在CentOS 7操作系统上安装和运行RabbitMQ所需的全部组件,包括Erlang环境,这是RabbitMQ的基础,因为RabbitMQ是用Erlang编程语言编写的。 1. Erlang:Erlang是一种并发、...

    rabbitmq-server-3.8.9-1+erlang-23.1.1+socat-1.7.3.2

    总结来说,这个压缩包提供了一套完整的RabbitMQ服务器安装解决方案,包括必要的Erlang运行环境和 socat 工具,适用于CentOS 7系统。用户可以根据提供的RPM包进行安装,实现一个功能完备的消息队列服务。

    RabbitMQ系统中客户端子系统进程层级图1

    这个监督者进程是整个客户端子系统的基石,当任何子进程出现问题时,它会根据Erlang的分布式计算模型进行故障恢复。 接着,`rabbit_connection_sup`是一个监督进程,负责创建和维护`rabbit_connection`进程。`...

    《架构师》12月份期刊

    ### 《架构师》12月份期刊核心知识点总结 #### 一、资源限制与开发挑战 **背景**:本文从Matrix电影中的一句经典台词“Time is always against us”(时间总是不够用)出发,讨论了软件开发过程中普遍存在的资源...

    RabbitMQ自动安装脚本

    2. **安装Erlang**: 解压Erlang OTP包,然后将其安装到系统的适当位置。 3. **安装RabbitMQ**: 将RabbitMQ Server二进制包解压,并复制到Erlang的lib目录下,以使RabbitMQ能够找到其依赖。 4. **配置RabbitMQ**: ...

    rabbitmq安装.zip

    总结,RabbitMQ是一个强大且灵活的消息中间件,其安装过程相对简单,但理解其核心概念和应用场景是实现高效系统的关键。通过熟练掌握RabbitMQ,开发者可以在分布式系统中构建出更加稳定、可靠的通信架构。

    MQ-RabbitMQ介绍和安装

    1. 安装Erlang:RabbitMQ依赖Erlang环境,首先确保你的系统上已安装Erlang。 2. 下载RabbitMQ:访问官方网站下载适合你操作系统的RabbitMQ服务器软件包。 3. 安装RabbitMQ:按照官方文档的指示进行安装。 4. 启动...

    通信网理论基础期中测试.pdf

    总结来说,通信网理论基础期中测试涵盖了概率统计基础、随机过程(泊松过程)、排队论(Erlang B公式)和网络性能分析(时延计算)等核心知识点。理解和应用这些概念是理解和优化通信网络的关键,它们在实际的网络...

    RabbitMQ 安装包和开启MQTT功能

    总结来说,RabbitMQ 的安装与 MQTT 功能的开启涉及下载和安装 Erlang OTP 以及 RabbitMQ 服务器,启用 MQTT 插件,配置参数,最后验证 MQTT 连接。这是一项关键的操作,使得 RabbitMQ 能够支持物联网设备和其他 MQTT...

    RabbitMQ学习总结

    RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol)的开源消息代理软件,它使用Erlang编程语言来编写,并且构建在 OTP(Open Telecom Platform)框架之上,提供了高可用性和稳定性。RabbitMQ的核心功能是...

    arm_rabbitmq.zip

    总结,ARM架构上的RabbitMQ部署和应用涉及了操作系统环境的准备、中间件的安装配置、消息队列的管理和应用等多个层面。理解这些知识点对于构建高效、稳定的分布式系统至关重要。通过不断实践和优化,我们可以在ARM...

    Tsung负载测试tigase

    2. **修改系统限制**:通过`ulimit -n 20480`增加文件描述符的数量,确保Tsung可以建立足够多的连接。 3. **编写测试脚本**:创建一个XML配置文件,定义测试的具体参数。 4. **执行测试**:启动Tsung服务,观察系统...

Global site tag (gtag.js) - Google Analytics