【发布时间】:2018-11-06 05:52:30
【问题描述】:
我从 Elixir 开始,并在使用 iex 连接到我的远程生产节点时观察到一些奇怪的行为。
如下面的屏幕截图所示,观察者报告总共有 92 MB 内存在使用中。然而,当你总结进程、原子、二进制文件、代码和 ets 的内存消耗时,它会是:~69 MB
Processes 19.00 MB
Atoms 0.97 MB (969 kB)
Binaries 13.00 MB
Code 28.00 MB
ETS 7.69 MB (7685 kB)
-------------------
Total 68.66 MB
那么,我的第一个问题是这额外的 23 MB 内存来自哪里?我很确定这不仅仅是一个报告问题。因为当我查看 Kubernetes pod 的内存消耗时,它是 ~102 MB,这与观察者显示的数字一致。
我唯一能想到的是那些 23 MB 还没有被垃圾收集。我的假设有效吗?如果是这样,那么自此容器启动以来已经 6 小时了。而且我从一开始就一直在监控内存消耗。现在不应该是垃圾收集吗?
第二个问题:我可以对 Erlang VM / Elixir 配置进行调整以优化内存占用吗?
【问题讨论】:
-
您需要深入了解 VM 以获得准确的数字,但也有堆栈、VM 以及可能会增加分配给进程的页面的算法(很可能是数字对于“总计”)以较大的增量。是否有任何特殊原因需要使用 RAM 的每个字节?通常,我根本不看这些统计数据,我在 RPi 等内存受限的设备上工作了很多......
标签: erlang elixir phoenix-framework