问题描述:
服务器测试时,在正常运行2-3天之后直接挂掉了.
解决过程:
工作一年多了,之前遇到的都是一些报错和数据错误的bug,然后erlang就自动将那个进程重启了.erlang本身容错就做的很好,像这种服务器直接挂掉了的情况还没遇到过.吓得我赶紧百度一波导致erlang 挂掉的原因.
网上学习一波之后还是有点感觉,至少不像一开始一样一点思路都没有(http://blog.sina.com.cn/s/blog_96b8a1540100zn1q.html)
然后在日志里看到:
eheap_alloc: Cannot allocate 529782288 bytes of memory (of type “heap”).
serial read: Broken pipe
那么假如是内存耗尽了该怎么处理呢?
这里有篇博客:http://erlangdisplay.iteye.com/blog/1214167
因为测试的地方只有局域网,我这边也没办法去现场,就在util模块里添加几个方法,方便现场的直接进行运行:
spawn(fun() -> etop:start([{output, text}, {interval, 10}, {lines, 20}, {sort, memory}]) end).
这段代码会在终端每10秒一次,以memory大小排序显示.在现场运行的时候,发现里面有个MsgQ一直在增加,数字大的吓人,因为这个进程的信箱嘛,那么应该就是这个原因了:mailbox耗尽了系统的内存.
问题找到了,那么是什么导致的这个问题呢,这边就用到了eprof这个分析工具:http://blog.
erlang 服务器崩溃bug
最新推荐文章于 2025-06-23 16:24:13 发布