erlang:memory()vs memsup:get_system_memory_data()

zor*_*oro 2 memory erlang

对不起,我在erlang文档中对以下这些描述不太清楚:

erlang:memory() - > [{Type,Size}]

with Type:"total"表示:"当前分配的内存总量.这与进程和系统的内存大小总和相同."

memsup:get_system_memory_data() - > MemDataList

带有标记的MemDataList = [{Tag,Size}]:"total_memory"表示:"Erlang仿真器可用的内存总量,已分配且可用.可能或可能不等于系统中配置的内存量."

请问这里有人更明白吗?

Hyn*_*dil 5

erlang:memory/0,1显示Erlang VM(BEAM)的当前状态.memsup:get_system_memory_data/0显示操作系统的当前状态.

1> erlang:memory(total) / (1 bsl 20).
12.918495178222656
2> memsup:get_system_memory_data().
[]
3> 
=WARNING REPORT==== 13-Jan-2018::10:51:15 ===
OS_MON (memsup) called by <0.61.0>, not started
3> application:ensure_all_started(os_mon).

=PROGRESS REPORT==== 13-Jan-2018::10:51:41 ===
...
=INFO REPORT==== 13-Jan-2018::10:51:41 ===
    alarm_handler: {set,{system_memory_high_watermark,[]}}

4> proplists:get_value(total_memory,memsup:get_system_memory_data()) / (1 bsl 30).
7.691337585449219
5> erlang:memory(total) / (1 bsl 20).
14.661575317382813
Run Code Online (Sandbox Code Playgroud)

这意味着我的BEAM在启动后使用12.9MB内存.要获得OS内存,您必须启动os_mon应用程序.我的操作系统有7.69GB可供BEAM使用.在开始所有必要的应用程序之后,我的BEAM使用了14.7MB os_mon.