初学erlang时总觉得它原本应是健壮的,但一想任何编程语言都会因为人为的失误造成崩溃,以下是在chinaerlang上看到的:
1. 耗尽atom
因为atom是不会被垃圾回收的,所以如何程序运行时生成太多的atom,(例如在无穷循环里,每次循环都调用几下 list_to_atom),atom table会被塞满,然后erlang就当掉了
2。进程的耗尽
如果你spawn了太多unlink的不会终止的进程,而且这些进程你都不保存它们的Pid,这样你就失去了和这些进程的联系(和引用),这可以看成是进程泄漏,(有点像内存泄漏),随着越来越多的进程泄漏。。。,然后erlang就当掉了
3。洪泛消息到一个进程的mailbox
不断给某个进程发送消息(而不用等待其回复时),如果接收消息的这个进程的receive语句写得不好,比如模式匹配有漏(或有错),这个进程就会漏掉许多的消息,这些被漏掉的消息不断的在该进程的mailbox中堆积,最后mailbox耗尽了系统的内存,然后erlang就当掉了
4。在一个单独的进程中创建了太多的binary数据
超过64字节的binary数据是在进程之外的堆上分配的,通过引用计数进行控制,引用计数表示有多少进程访问此bianry数据。当对一个进程进行垃圾回收时,没有被引用的数据会被删除,但只有垃圾回收时才会删除。所以可能在垃圾回收前由于堆中就堆满了二进制数据而使erlang耗尽内存崩溃。这种情况,至少在理论上,是存在这种可能性的。
这些原本是说明erlang在何种情况下会当掉,也算是对给我们提个醒。
分享到:
相关推荐
跟随安装向导的提示进行操作,选择合适的安装路径,注意勾选添加Erlang到系统PATH选项,以便于命令行环境下直接调用erl命令。 3. 验证安装:安装完成后,可以在命令行输入"erl"来启动Erlang shell,如果出现Erlang...
同时要特别注意避免竞态条件和死锁,以及利用Erlang的分布式特性进行设计。 #### 4. 工具介绍 Erlang社区提供了多种工具帮助开发和调试,例如调试器erts_debug和observer用于监控运行时性能。hotreplace模块允许...
对于特定版本的Erlang,可能还有额外的注意事项或特定的编译选项。 总的来说,离线安装Erlang需要对编译和系统管理有一定的理解,但通过以上步骤和提供的资源,你应该能够成功地在没有网络连接的情况下完成安装。...
注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖用erlang的amd版本 3. erlang要以管理员身份安装运行,并设置ERLANG_HOME环境变量。以及在path中设置ERLANG_HOME的bin...
在安装过程中,用户需要注意以下几点: 1. **系统兼容性**:确保你的操作系统是64位Windows,因为提供的安装包是针对这个平台的。 2. **安装过程**:运行压缩包内的"最新安装包_64位_21.3.exe"文件,按照安装向导...
文章首先讲解了Erlang NIF的基本概念和用途,指出NIFs可以在Erlang VM中提供接近原生速度的性能,但同时也需要注意它们可能带来的安全性问题。接着,文章深入探讨了Rustler库,该库为Rust和Erlang之间的接口提供了...
不过,值得注意的是,32位版本的Erlang可能更适合在32位操作系统上运行。 "linux版本"的提法暗示了这个压缩包还可能包含适用于Linux操作系统的Erlang二进制文件。Linux是Erlang广泛应用的平台之一,因为其开源特性...
特别注意事项:** - 在Windows平台上,Erlang/OTP 20.2更改了默认的cookie文件位置,这可能会影响身份验证和连接设置。 - RabbitMQ 3.6系列在2015年12月22日发布,但在2018年5月31日已经达到了生命周期的末尾。...
在安装Erlang和RabbitMQ的过程中,需要注意以下几点: 1. 先安装Erlang:因为RabbitMQ依赖于Erlang环境,所以必须先确保Erlang正确安装并配置到系统路径。 2. 获取Erlang OTP的安装包:可以从官方或可靠的第三方源...
在实践中,使用NIF时需要注意以下几点: - **线程安全**:Erlang的并发模型基于轻量级进程,而C代码可能涉及到线程。因此,必须确保C代码是线程安全的,尤其是在多线程环境下操作共享数据时。 - **内存管理**:...
`readme.txt`是一个标准的文档,通常提供有关压缩包内容的简要说明,包括如何使用文件、注意事项和可能的依赖项。在本案例中,它可能详细解释了怎样运行演示、示例代码的目的和环境配置要求。 `11. erlang demo`到`...
Erlang TCP服务器是用Erlang编程语言实现的一种网络通信服务,它允许程序通过TCP协议接收和...在设计和实现过程中,需要注意代码的可读性、可维护性和性能优化。通过实践和不断迭代,可以打造出稳定且高效的网络服务。
4. **注意事项** - **性能**:尽管`gproc`提供了很多便利,但过多的全局注册和数据同步可能会对性能产生影响,需要权衡使用。 - **名字冲突**:全局名字必须唯一,避免在不同进程中使用相同的注册名。 - **资源...
注意:Erlang的版本`19.2`可能已经较旧,可能不支持最新的操作系统特性或库。建议查看Erlang官方文档,获取最新稳定版的源代码,并根据最新的依赖关系进行安装。 安装Erlang后,你就可以利用其强大的并发特性和...
另一个文件“新建文本文档 (2).txt”可能包含有关安装或使用Erlang的说明或者注意事项,例如配置环境变量、验证安装成功的方法、启动Erlang shell的命令,或者是关于RabbitMQ的安装和配置指南。用户应当打开这个文本...
5. **注意事项** - 使用iconv库时,确保正确地处理编码不兼容和数据丢失的情况,比如某些字符在目标编码中不存在。 - 转换过程中可能需要动态调整输入和输出缓冲区的大小,以适应转换过程中的字节需求。 - 错误...
在Erlang中编程,开发者可以将注意力集中在业务逻辑上,而无需过多关注底层的并发控制。Erlang程序的结构和行为往往能更好地反映我们对现实世界的理解和互动方式。例如,通过使用轻量级的进程和高效的消息传递机制,...
在Erlang中,存在一些内置函数(BIFs)和特殊语法,它们是语言的核心组成部分,但使用时需要注意它们可能带来的副作用。 常见错误部分列举了一些编程中应当避免的错误实践,比如使用硬编码的模块名,或者在函数中产生...
Erlang RPM Master压缩包文件提供了在Linux...通过上述步骤和注意事项,你就能在Linux系统中成功安装Erlang环境,为RabbitMQ的部署提供必要支持。这将让你能够充分利用RabbitMQ的强大功能,实现可靠的消息传递和通信。
在Erlang 20.3中,一些值得注意的改进包括: 1. **性能提升**:优化了虚拟机(VM)的内存管理和垃圾收集,提高了整体运行效率。 2. **错误修复**:解决了许多已知的bug,提高了系统的稳定性和可靠性。 3. **并发...