erlang 服务器崩溃bug

在服务器测试中,Erlang服务器在运行2-3天后崩溃。通过分析日志和使用工具,发现由于MsgQ信箱内存耗尽导致问题。使用eprof定位到低效代码,通过改进避免了内存问题。然而,随后出现的timeout错误经排查发现与C程序内存泄露有关,问题最终转交C同事解决。这次经历强调了不断学习和利用资源解决问题的重要性。
摘要由CSDN通过智能技术生成

问题描述:
服务器测试时,在正常运行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这个分析工具:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值