erlang:memory()和memsup:get_system_memory_data()的区别

3
抱歉,我不太清楚以下Erlang文档中的描述:
erlang:memory() -> [{Type, Size}] 当Type为“total”时,表示:“当前分配的内存总量。这相当于进程和系统内存大小的总和。”
memsup:get_system_memory_data() -> MemDataList MemDataList = [{Tag, Size}] 当Tag为“total_memory”时,表示:“Erlang仿真器可用的内存总量,包括已分配和空闲的内存。可能等于或不等于系统中配置的内存量。”
请问是否有人能让它更容易理解?
1个回答

7

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

这意味着我的 BEAM 在启动后使用了 12.9MB 的内存。要获取操作系统内存,您必须启动 os_mon 应用程序。我的操作系统有 7.69GB 可用内存,BEAM 可能会潜在地使用它。启动所有必要的应用程序 os_mon 后,我的 BEAM 使用了 14.7MB。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接