zoukankan      html  css  js  c++  java
  • erlang中检查内存泄露

    最近项目内存占用过多,检查一下erlang的内存使用情况。

    1. 通过etop可以很方便得出erlang内存使用的情况

    spawn(fun() -> etop:start([{output, text}, {interval, 5}, {lines, 20}, {sort, memory}]) end).
    

    可以定义显示的时间、行数、按照内存使用的大小排列。

    2.一般情况etop都能很稳定地工作,但个别极端情况下,etop会使用不了。这个情况下,只能上命令:

    RawList = [{Pid, element(2, erlang:process_info (Pid, memory))} ||  Pid <- processes ()].
    SortList = lists:reverse(lists:keysort(2, RawList)).
    rp(lists:sublist(SortList, 20)).
    

    上面2个方法都可以找出最占用内存的20个进程。

    接着我们就可以找出内存的内存情况。

    假设一个内存pid为<0.928.0>,在shell终端中使用rp()打印所有信息。

    rp(erlang:process_info(pid(0, 928, 0))).
    

    如果进程信息比较大,直接输出到文件:

    file:write_file("process_info.txt", [io_lib:format("~p", [erlang:process_info(pid(0, 928, 0))])]).
    

    注意:上面写入文件,如果进程使用的内存过大,会导致上线的项目崩溃,慎用。

    上面可以获取到进程的进程字典信息,但进程的状态信息不在这里。

    获取进程的状态信息:

    rp(erlang:process_info(pid(0, 928, 0), backtrace)).
    

    上面这个方法占用内存很少,可以快速定位进程的当前状态的信息,建议第一时间使用。  

  • 相关阅读:
    saltstack安装和配置
    puppet安装和配置
    mongodb使用
    mongdb安装
    redis数据类型
    redis安装
    memcached结合php以及memcache共享session
    yum安装的Apache的各种配置文件的位置
    memcached 基本操作
    memcached基本操作和语法
  • 原文地址:https://www.cnblogs.com/getong/p/5198253.html
Copyright © 2011-2022 走看看