erlang 内存问题

Erlang内存占用排查流程 使用Erlang搭建游戏服务器时,运维往往会吐槽cpu占用过高、带宽太大或者内存消耗太快,本文总结一下排查内存占用过高的主要思路和流程。 阅读详情
1.生产上的服务器,运行到2天左右就会产生core文件,在家折腾了两天,把一些过程记录下来,
   希望能帮上有需要的人。
    gdb  /usr/lib64/erlang/xxx/xxx/beam.smp  core.3435
     ....
   
    gdb) bt
    #0  0x0000003b5bc30265 in raise () from /lib64/libc.so.6
    #1  0x0000003b5bc31d10 in abort () from /lib64/libc.so.6
    #2  0x000000000044f3b0 in erl_exit ()
    #3  0x00000000004380a4 in erts_alc_fatal_error ()
    #4  0x0000000000438131 in erts_alloc_n_enomem ()
    #5  0x000000000051e918 in ?? ()
    #6  0x000000000052090f in ?? ()
    #7  0x000000000051d8fc in erts_garbage_collect ()
    #8  0x00000000004bc3c0 in schedule ()

   
     看到erlang运行时分配内存不足

2. 代码有死循环? or 非法的用户用脚本在刷服务
     那就远程看一下在线的服务器运行情况

erlang进程占用内存过多的查找问题过程 最近开发一个 阅读详情

相关推荐

一次erlang VM内存泄漏问题复盘

1、问题发现 在一次压测中,发现erlang VM使用内存超出预期,其中process使用内存在正常范围内,system使用内存超出预期很多,具体占到整个内存使用量的80%,其中binary一项占用了system的绝大部分使用量,很明显,系统存在binary泄漏。 2、问题追踪 问题发生后,首先想到的就是到底binary在erlang VM中是怎么创建和回收的。众所周知,binary分为两种...

pyf725324的专栏 602

Erlang 初学者技巧及避免的陷阱

1. 传参或在匿名函数内慎用self() 通常在做消息传递或新建进程的时候我们需要将当前进程的Pid发给目标进程以便接收返回信息,但初学者不留意容易犯以下错误 spawn(fun() -> loop(self(), gen_tcp:accpet(...)) end). fun这段代码在本进程内是不会预先执行的,代码会原封不动传给目标进程。当实际调用self()...

weixin_30607659的博客 183

一次由Erlang垃圾回收导致的内存泄漏

最近有一个erlang的服务因为oom被kernel kill掉了, 由于从监控来说这个服务确实是内存不断增长。所以这个服务应该在哪里有内存泄漏才对。于是我又一次开始定位这个问题。定位到底哪个进程占用了最多的内存由于在另一个节点有一个没有crash,但是内存仍旧很高的节点,所以这个问题处理起来很简单。erlang提供了完整的运行时系统debug环境。这里我们用etop,根据memory排序,查看具...

zerooffdate的专栏 1119

Erlang进程堆垃圾回收机制

原文:Erlang进程堆垃圾回收机制 作者:http://blog.csdn.net/mycwq 每个Erlang进程创建之后都会有自己的PCB,栈,私有堆。erlang不知道他创建的进程会用到哪种场合下,所以一开始分配的内存比较小。如果分配的空间不够了,erlang gc会动态调整堆大小以满足需求,如果分配的空间大了,就会收缩堆,回收内存erlang进程堆的gc是分代gc,分代gc的想...

ve12345的博客 436

Erlang虚拟机内存使用问题以及监控

Erlang虽然号称N个9的稳定性,但是在实际使用中还是有很多机会看到Erlang Crash了的,其中和VM相关的Crash 十有八九是由于内存使用过量,导致系统服务分配内存导致的。Erlang内存分配测量是集中批发,零售给各个VM部件,包括用户进程和ETS数据库等内存消费大户。VM的内存增长是以fib方式上升的,一旦你的内存使用到G级别,那么之后的大量内存分配会以超过你预想的速度消费。

Sunface撩技术 2536

erlang 内存增长的一些处理

文章翻译来至   https://blog.heroku.com/archives/2013/11/7/logplex-down-the-rabbit-hole 并非原创。因为觉得文章写的非常好,所以翻译出来。翻译不准的地方请校正。 作者的内存出现崩溃,然后作者开始着手研究Erlang内存分布。 翻译如下: 开始我决定去等待节点再次crach。我希望这时候的crash dump

u013456128的博客 4640

Erlang 内存泄漏分析

随着项目越来越依赖Erlang,碰到的问题也随之增加。前段时间线上系统碰到内存高消耗问题,记录一下troubleshooting的分析过程。线上系统用的是Erlang R16B02版本。 问题描述 有几台线上系统,运行一段时间,内存飙升。系统模型很简单,有网络连接,pool中找新的process进行处理。top命令观察,发现内存都被E...

weixin_34413802的博客 178

Memory matters - even in Erlang (再次说明了了解内存如何工作的必要性)

作者解决问题的思路非常敬佩! 真没想到hibernation后, 由于对象的移动, 使得内存访问的不连续, 导致内存cahche的失效, 速度可以慢这么多! Some time ago we got an interesting bug report for RabbitMQ. Surprisingly, unlike other complex bugs, this one is ea

Sunface撩技术 1644

Erlang服务器内存耗尽调查(转)

本文描述Erlang服务器内存耗尽bug的解决过程。 首先说明一下问题服务器1千多人在线,16G内存快被吃光。玩家进程占用内存偏高: 接下来是解决过程。 第一步: 查看进程数目是否正常? erlang:system_info(process_count). 进程数目合理 第二步: 查看节点的内存消耗在什么地方? > erlang:memory(). [{tot

收藏夹+记事本 395

Erlang内存分配策略

场景: 游服 erl虚拟机内存占用率过高,但是实际上的内存利用率非常低。原因是内存分配采用的是最快分配策略,会导致 1kb大小的数据占用 100kb大小的内存块,导致利用率低。 原因: 我们项目中频繁使用二进制数据,Port口请求、DB存储都有使用二进制数据,当二进制数据的长度超过64 bytes 时就会在堆内存开辟一块空间。数据库read之后,会把查询的值缓存一天,这个值占用内存空间就不会被释放掉。 而内存利用率低的原因个人认为是因为登录数据、战报数据开辟的空间比较大,而DB读取的数据比较小,小的数据占

为天地立心,为生民立命,为往圣继绝学,为万世开太平 1629

Erlang内存吃紧之解决思路

首先使用erlang:memory()确定是哪个部分内存吃紧,根据输出的内容,比对内存占用大小,有针对性地进行分析。在erlang系统里内存的单位为word,通过erlang:system_info(wordsize)接口可以看到一个word占用多少个字节。如32位系统是4字节,64位系统是8字节。 > memory(). ...

weixin_33742618的博客 648

[Erlang危机](5.1.1)内存

原创文章,转载请注明出处:server非业余研究http://blog.csdn.net/erlib 作者Sunface联系邮箱:cto@188.comMemoryThe memory reported by the Erlang VM in most tools will be a variant of what is reported by erlang:memory() :Erlang ...

weixin_33813128的博客 158

erlang 内存被大量占用,跟踪过程

第一步:查看进程数目是否正常? erlang:system_info(process_count).   第二步:查看节点的内存消耗在什么地方?> erlang:memory(). [{total,2099813400}, {processes,1985444264}, {processes_used,1985276128}, {system,114369136}, {atom,447...

koteancno的专栏 482

erlang 各种数据类型占用内存大小

erlang的话讲,深入了解erlang不同数据类型所占的内存空间大小,是erlang高效编程的一个良好开始。 一个程序要运行,就要先描述其算法。描述一个算法应先说明算法中要用的数据,数据以变量或常量的形式来描述。每个变量或常量都有数据类型。 很多人都以为要把算法写得多精湛,才算高效编程,其实不然,细微处见功夫。 以下内容展示了erlang各种数据类型占用内存大小。 Memory D...

fstars的专栏 1601

Erlang监测系统CPU、内存、磁盘

os_monErlang的os_mon服务中提供了一些用于监测系统信息的服务cpu_sup:监测CPU负载和使用率(Unix)disksup:监测磁盘(Unix、Windows)memsup:监测内存(Unix、Windows、VxWorks)os_sup:监测系统日志(Solaris、Windows)使用os_mon进行监测先必须启动监测服务application

The__one的专栏 3219
上一篇: Centos 6.3 RabbitMQ 安装
下一篇: monogodb windows下安装
whatiserlang
博客等级 码龄17年 2粉丝 15原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值