Erlang:内存使用数据的差异
当我运行WebSocket测试时,我发现了以下有趣的内存使用结果: 服务器已声明,没有连接Erlang:内存使用数据的差异,erlang,Erlang,当我运行WebSocket测试时,我发现了以下有趣的内存使用结果: 服务器已声明,没有连接 [{total,573263528}, {processes,17375688}, {processes_used,17360240}, {system,555887840}, {atom,472297}, {atom_used,451576}, {binary,28944}, {code,3774097}, {ets,271016}] 44 processes, System:705M,
[{total,573263528},
{processes,17375688},
{processes_used,17360240},
{system,555887840},
{atom,472297},
{atom_used,451576},
{binary,28944},
{code,3774097},
{ets,271016}]
44 processes,
System:705M,
Erlang Residence:519M
100K连接
[{total,762564512},
{processes,130105104},
{processes_used,130089656},
{system,632459408},
{atom,476337},
{atom_used,456484},
{binary,50160},
{code,3925064},
{ets,7589160}]
100044 processes,
System: 1814M,
Erlang Residence: 950M
200K连接
(重新启动服务器并从0连接创建,而不是从案例2继续)
带有“System:”和“Erlang:”的数字是htop提供的,其他数字是来自erlangshell的memory()调用的输出。请查看总内存和erlang住宅内存。当没有连接时,这两者大致相同,有100K连接时,驻留内存略大于总内存,有200K连接时,驻留内存几乎是总内存的两倍
有人能解释吗?对于您的问题,最可能的答案是内存碎片 分配操作系统内存非常昂贵,因此Erlang会尝试为您管理内存。
当Erlang分配内存时,它会创建一个名为“carrier”的实体,该实体由许多“块”组成。Erlang memory(total)报告所有块大小(实际使用的内存)的总和。OS报告所有载体大小之和(已使用和预分配的内存之和)。块大小和载波大小都可以从Erlang VM读取。如果(块大小)/(载波大小)最可能的查询答案是内存碎片 分配操作系统内存非常昂贵,因此Erlang会尝试为您管理内存。
当Erlang分配内存时,它会创建一个名为“carrier”的实体,该实体由许多“块”组成。Erlang memory(total)报告所有块大小(实际使用的内存)的总和。OS报告所有载体大小之和(已使用和预分配的内存之和)。块大小和载波大小都可以从Erlang VM读取。如果(块大小)/(载体大小)内存没有被虚拟机跟踪,而是由连接的系统句柄跟踪,也许?我们需要更多信息。来自erlang VM和系统。在操作系统端运行pmap,在erlang端运行进程摘要(例如,顶级队列持有者)。VM不跟踪内存,但可能会跟踪连接的系统句柄?我们需要更多信息。来自erlang VM和系统。在操作系统端运行pmap,在erlang端运行进程摘要(例如顶级队列持有者)。
[{total,952040232},
{processes,243161192},
{processes_used,243139984},
{system,708879040},
{atom,476337},
{atom_used,456484},
{binary,70856},
{code,3925064},
{ets,14904760}]
200044 processes,
System:3383M,
Erlang: 1837M
recon_alloc:fragmentation(current).
recon_alloc:fragmentation(max).
erl +MBas aobf +MBlmbcs 512