天天看點

Erlang可以挂掉的四種原因

  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耗盡記憶體崩潰。這種情況,至少在理論上,是存在這種可能性的。

原文: http://blog.sina.com.cn/s/blog_96b8a1540100zn1q.html