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 supervisor重启策略

最近阅读了一下erlang的supervisor模块,自己写了一些简单的代码来区分不同重启策略的区别,这里记录一下。首先为了能够直观的观察,我把代码写成了一个application方便用工具观察。接着...

Erlang程序设计中文版

  • 2017-10-10 11:10
  • 14.82MB
  • 下载

erlang tcp_server

《Learn You Some Erlang for Great Good!》的学习笔记(七)

高阶函数

Erlang基础知识集锦

  • 2017-09-21 19:11
  • 1014KB
  • 下载

(Erlang语言)数据类型详细介绍——binary

binary 是 Erlang 中一个具有特色的数据结构,用于处理大块的“原始的”字节块。如果没有 binary 这种数据类型,在 Erlang 中处理字节流的话可能还需要像列表或元组这样的数据结构。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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