最近項目內存佔用過多,檢查一下erlang的內存使用狀況。shell
1. 經過etop能夠很方便得出erlang內存使用的狀況spa
spawn(fun() -> etop:start([{output, text}, {interval, 5}, {lines, 20}, {sort, memory}]) end).
能夠定義顯示的時間、行數、按照內存使用的大小排列。code
2.通常狀況etop都能很穩定地工做,但個別極端狀況下,etop會使用不了。這個狀況下,只能上命令:orm
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個進程。blog
接着咱們就能夠找出內存的內存狀況。進程
假設一個內存pid爲<0.928.0>,在shell終端中使用rp()打印全部信息。內存
rp(erlang:process_info(pid(0, 928, 0))).
若是進程信息比較大,直接輸出到文件:element
file:write_file("process_info.txt", [io_lib:format("~p", [erlang:process_info(pid(0, 928, 0))])]).
注意:上面寫入文件,若是進程使用的內存過大,會致使上線的項目崩潰,慎用。it
上面能夠獲取到進程的進程字典信息,但進程的狀態信息不在這裏。io
獲取進程的狀態信息:
rp(erlang:process_info(pid(0, 928, 0), backtrace)).
上面這個方法佔用內存不多,能夠快速定位進程的當前狀態的信息,建議第一時間使用。