You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Erlang中erlang:memory()与memsup:get_system_memory_data()的释义疑问

拆解Erlang两个内存统计函数的区别

我来用大白话给你讲清楚这两个函数里的内存指标差异:

1. erlang:memory() 中的 total

当前已分配的内存总量,等于进程内存与系统内存之和

这个指标可以理解为Erlang虚拟机已经实际“用起来”的内存总和

  • 它包含两部分:所有Erlang进程各自占用的内存(比如进程的栈、堆、消息队列这些),加上虚拟机自身运行需要的系统级内存(比如虚拟机内部的缓存、管理数据结构、底层服务占用的内存)
  • 简单说,这就是虚拟机当前“实打实占住”的内存,相当于你打开软件后,任务管理器里看到的该软件已使用内存。

2. memsup:get_system_memory_data() 中的 total_memory

Erlang模拟器可用的内存总量,包括已分配和空闲部分,可能与系统配置内存不等

这个指标是Erlang虚拟机能调用的整个内存“池子”大小

  • 它不仅包含虚拟机已经用了的内存,还包括还没用到但虚拟机有权使用的空闲内存
  • 这个值不一定等于物理内存总大小:比如你给Erlang虚拟机设置了内存上限(通过启动参数+P+M之类的配置),那它就是你设置的上限;如果没设置,那它是主机系统当前能分配给虚拟机的内存总量(要扣掉系统其他程序已经占用的部分)。

一句话对比

  • erlang:memory()total已经花出去的钱
  • memsup:get_system_memory_data()total_memory钱包里总共能花的钱(含已花的)

内容的提问来源于stack exchange,提问作者zoro

火山引擎 最新活动