erlang的陷阱

翻译 2012年03月22日 09:46:51

原文地址:  http://prog21.dadgum.com/43.html


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高级数据类型,函数式、列表解析、二进制、引用

一、函数式 1.1 函数作为变量值 1.2 函数作为参数 1.3 函数作为返回值 代码: -module(test). -export([foreach/2, times/1]). %1. 函数...

Erlang列表解析

列表解析是一种无须使用fun,map或filter来创建列表的表达式,他能使代码更加简洁,更加容易理解。 如: 1>L= [1,2,3,4]. 2>lists:map(fun(X)->2*X e...

Erlang编程

  • 2017年11月12日 20:28
  • 2.66MB
  • 下载

erlang关闭一个socket进入死循环的bug修复过程

1、现象 游戏服务器与多个客户端建立连接,socket设置参数如下[binary, {packet, 4}, {active, 0}, {reuseaddr, true}, {nodelay, fa...

ERLANG最新版安装包Win64位

  • 2017年11月18日 18:29
  • 91.61MB
  • 下载

esl-erlang-20.1-1.x86_64

  • 2017年11月30日 10:37
  • 40.95MB
  • 下载

erlang mnesia 脏写的性能瓶颈和解决办法

mnesia脏写的话和脏读最大的区别是要同步数据,假如一个项目有3个节点A,B,C。在A节点脏写一个数据,这个操作需要2步,1,对本地节点的mnesia写入数据。2,对B,C两个节点发消息,告诉他们要...
  • sjc9009
  • sjc9009
  • 2015年08月19日 21:14
  • 1079
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:erlang的陷阱
举报原因:
原因补充:

(最多只允许输入30个字)