Erlang可以挂掉的四种原因
2015-09-04 17:51
190 查看
耗尽atom
因为atom是不会被垃圾回收的,所以如何程序运行时生成太多的atom,(例如在无穷循环里,每次循环都调用几下 list_to_atom),atom table会被塞满,然后erlang就当掉了
进程的耗尽
如果你spawn了太多unlink的不会终止的进程,而且这些进程你都不保存它们的Pid,这样你就失去了和这些进程的联系(和引用),这可以看成是进程泄漏,(有点像内存泄漏),随着越来越多的进程泄漏。。。,然后erlang就当掉了
洪泛消息到一个进程的mailbox
不断给某个进程发送消息(而不用等待其回复时),如果接收消息的这个进程的receive语句写得不好,比如模式匹配有漏(或有错),这个进程就会漏掉许多的消息,这些被漏掉的消息不断的在该进程的mailbox中堆积,最后mailbox耗尽了系统的内存,然后erlang就当掉了
在一个单独的进程中创建了太多的binary数据
超过64字节的binary数据是在进程之外的堆上分配的,通过引用计数进行控制,引用计数表示有多少进程访问此bianry数据。当对一个进程进行垃圾回收时,没有被引用的数据会被删除,但只有垃圾回收时才会删除。所以可能在垃圾回收前由于堆中就堆满了二进制数据而使erlang耗尽内存崩溃。这种情况,至少在理论上,是存在这种可能性的。
原文: http://blog.sina.com.cn/s/blog_96b8a1540100zn1q.html
因为atom是不会被垃圾回收的,所以如何程序运行时生成太多的atom,(例如在无穷循环里,每次循环都调用几下 list_to_atom),atom table会被塞满,然后erlang就当掉了
进程的耗尽
如果你spawn了太多unlink的不会终止的进程,而且这些进程你都不保存它们的Pid,这样你就失去了和这些进程的联系(和引用),这可以看成是进程泄漏,(有点像内存泄漏),随着越来越多的进程泄漏。。。,然后erlang就当掉了
洪泛消息到一个进程的mailbox
不断给某个进程发送消息(而不用等待其回复时),如果接收消息的这个进程的receive语句写得不好,比如模式匹配有漏(或有错),这个进程就会漏掉许多的消息,这些被漏掉的消息不断的在该进程的mailbox中堆积,最后mailbox耗尽了系统的内存,然后erlang就当掉了
在一个单独的进程中创建了太多的binary数据
超过64字节的binary数据是在进程之外的堆上分配的,通过引用计数进行控制,引用计数表示有多少进程访问此bianry数据。当对一个进程进行垃圾回收时,没有被引用的数据会被删除,但只有垃圾回收时才会删除。所以可能在垃圾回收前由于堆中就堆满了二进制数据而使erlang耗尽内存崩溃。这种情况,至少在理论上,是存在这种可能性的。
原文: http://blog.sina.com.cn/s/blog_96b8a1540100zn1q.html
相关文章推荐
- Codeforces Round #310
- 活动目录创建与删除的CheckList!
- 找出数组中出现奇数次的元素
- android开发常用网址
- JavaScript之浏览器对象编程练习
- ***php解析html类库simple_html_dom
- 图片转化成二进制数据、等比缩放
- 获取硬件信息
- python猜数游戏和天气查询
- linux入门之echo
- HDOJ 题目3874 Necklace(线段树+离线求区间去重和)
- SLURM Array Job
- VB.Net与C# 的语法比较
- 精品软件 推荐 百度杀毒 软件
- CocoaPods 简介 转自唐巧的博客
- javaSE基础编程——多线程(生产者和消费者)
- 条款10 令operator=返回一个 reference to *this
- python的测试框架(一) -- 单元测试框架
- HDU 3001 【三进制状压DP】
- Entity Framework edmx(mapping文件)