在Erlang中找到哪个孩子用尽了我所有的记忆

时间:2018-09-20 02:35:54

标签: erlang

我正在对崩溃的Erlang程序进行故障排除。它内存不足。它有几个孩子是由OTP(主管中的one_for_one开始,还有一些是由spawn开始。

我正在启动程序,并进入Erlang提示符(test@test)1>。我想从这里查看每个孩子使用的内存量。我已经在网上搜索过,却没有找到任何东西,但这似乎已经足够解决需要这很普遍了。

如何从系统提示符下找到Erlang中每个子代的内存利用率?

2 个答案:

答案 0 :(得分:3)

您尝试过观察者吗?

在收到提示时,键入observer:start(),然后在“应用程序”选项卡中,您可以查看每个应用程序的所有进程。对于每个进程,可以通过打开process_info子窗口来获取内存使用情况。

答案 1 :(得分:2)

在项目列表中使用内存尝试erlang:process_info / 2

process_info(Pid, ItemList) -> InfoTupleList | [] | undefined
Types
Pid = pid()
ItemList = [Item]
Item = process_info_item()
InfoTupleList = [InfoTuple]
InfoTuple = process_info_result_item()
process_info_item() = 
backtrace |
binary |
catchlevel |
current_function |
current_location |
current_stacktrace |
dictionary |
error_handler |
garbage_collection |
garbage_collection_info |
group_leader |
heap_size |
initial_call |
links |
last_calls |
memory |
message_queue_len |
messages |
min_heap_size |
min_bin_vheap_size |
monitored_by |
monitors |
message_queue_data |
priority |
reductions |
registered_name |
sequential_trace_token |
stack_size |
status |
suspending |
total_heap_size |
trace |
trap_exit