Erlang项目内存泄漏分析方法项目内存泄漏分析方法
主要介绍了Erlang项目内存泄漏分析方法,本文讲解了分析方法、分析流程并找到问题原因和解决方法,需要的朋
友可以参考下
随着项目越来越依赖Erlang,碰到的问题也随之增加。前段时间线上系统碰到内存高消耗问题,记录一下troubleshooting的分
析过程。线上系统用的是Erlang R16B02版本。
问题描述问题描述
有几台线上系统,运行一段时间,内存飙升。系统模型很简单,有网络连接,pool中找新的process进行处理。top命令观察,
发现内存都被Erlang进程给吃完了,netstat命令查看网络连接数,才区区几K。问题应该是Erlang内存泄漏了。
分析方法分析方法
Erlang系统有个好处,可以直接进入线上系统,在生产现场分析问题。我们系统是通过Rebar管理的,可以用不同方法进入线
上系统。
本机登录本机登录
可以直接登录到线上机器,然后通过以下命令attach到Erlang系统里面
复制代码 代码如下:
$ cd /path/to/project
$ rel/xxx/bin/xxx attach
(node@host)>
通过通过remote shell
获取获取Erlang系统的系统的cookie
复制代码 代码如下:
$ ps -ef |grep beam %%找到参数 --setcookie
新开一个新开一个shell,使用同样的,使用同样的cookie,不同的,不同的nodename
复制代码 代码如下:
$ erl --setcookie cookiename -name test@127.0.0.1
用用start remote shell进入系统进入系统
复制代码 代码如下:
Erlang R16B02 (erts-5.10.3) [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.3 (abort with ^G)
(test1@127.0.0.1)1> net_adm:ping('node@127.0.0.1').
pong
(test1@127.0.0.1)2> nodes().
['node@127.0.0.1']
(test1@127.0.0.1)3>
User switch command
--> h
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s [shell] - start local shell
r [node [shell]] - start remote shell
q - quit erlang
? | h - this message
--> r 'node@127.0.0.1'
--> j
1 {shell,start,[init]}
2* {'node@127.0.0.1',shell,start,[]}
--> c 2
分析流程分析流程