- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始使用 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,这与观察者显示的数字一致。
Only thing I can think of is that those 23 MB has not been garbage collected yet. Is my assumption valid? If so, its been 6 hours since this container started. And I have been monitoring the memory consumption from very beginning. Shouldn't this be garbage collected by now?
第二个问题:我可以对 Erlang VM/Elixir 配置进行调整来优化内存占用吗?
最佳答案
我还一直在尝试解决 OTP 应用程序中有关内存管理的问题,对我特别有用的一个工具是 Fred Hebert 编写的名为 recon 的库。 。尤其是recon_alloc
模块提供了有关 Erlang VM 中内存使用情况的非常有用的信息。
以下引用直接摘自 recon_alloc:memory()
的文档函数,并可能让您了解正在发生的事情:
The memory reported by `allocated' should roughly match what the OS reports. If this amount is different by a large margin, it may be the sign that someone is allocating memory in C directly, outside of Erlang's own allocator -- a big warning sign. There are currently three sources of memory alloction that are not counted towards this value: The cached segments in the mseg allocator, any memory allocated as a super carrier, and small pieces of memory allocated during startup before the memory allocators are initialized. Also note that low memory usages can be the sign of fragmentation in memory, in which case exploring which specific allocator is at fault is recommended.
所以我认为额外的 23 MB 内存使用可能是由一些不需要的分配引起的,或者可能是由于碎片引起的。
关于你的第二个问题,Erlang中有一个工具叫做 erts_alloc它还描述了内存分配器的手动配置。可以通过将命令行标志传递给模拟器来完成,例如:
erl +SOMEFLAG +SOMEOTHERFLAG
但是文档中有一个大红色警告,强烈表明弄乱这些标志可能会导致比默认配置更糟糕的行为。
因此,如果这确实是解决问题的唯一方法,我的建议是采用这些修改。在这种情况下,有一个 book关于 Erlang 运行时系统的信息帮助我理解了一些方面,所以我也建议提前阅读它。
注意:这里在黑暗中进行了疯狂的拍摄,并没有直接回答您的问题,但仔细检查您的二进制文件的情况可能会很有用,因为我看到报告了 13 MB由观察者。根据它们的大小(小于或大于 64 字节),它们存储在进程堆中或通过引用访问。我遇到过案例#1,大量小型二进制文件堆积起来,最终导致我的系统崩溃。
在尝试解决这些问题时,我发现了一些其他有用的资源:
[erlang:garbage_collect(Pid) || Pid <- processes()].
它将立即在所有正在运行的进程上触发 GC。就我而言,它创造了奇迹。您也可以添加一个选项来异步调用它,这样您就不必阻塞直到全部完成:
[erlang:garbage_collect(Pid, [{async, RequestId}]) || Pid <- processes()].
希望这有帮助:)
关于erlang - 为什么 Erlang/Elixir 观察者内存使用数字不相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50552773/
我知道可以创建 object.__mul__(self, other)启用两个对象的自定义乘法的方法。然而,正如 python 文档中所解释的那样, to evaluate the expressio
我无法找到一种好方法来查找列中的所有负条目并将它们向上移动到列中,将它们与现有条目相加(即从当前条目中减去负条目),直到所有值都是正值。 重要的是,最终数据帧没有负值 & 所有以前的负条目 = 0。此
我想将 var string 中的所有元素相加。我确实尝试过这个,但现在我想对每个元素都这样做。 var operator = document.getElementById("operation")
“任何长度的正数表示为数字字符数组,因此介于‘0’和‘9’之间。我们知道最重要的密码位于数组索引 0 的位置。 例子: - 号码是 10282 - 数组将是数字 = [1,0,2,8,2] 考虑到这一
这是我的查询: UPDATE qanda SET amount = amount + 1000 WHERE id = ? AND type = 0; 默认情况下, amount 列为 null,当我执
不同列的值为1时,每列加10分。 要求将累加的结果汇总到表格的一列中。但总分不得超过20分。因此,如果总和达到 30,列中的结果将始终为 20。 SELECT CASE WHE
public static void main(String[] args) { Vector vec = new Vector(); vec.add(new
我正在尝试使用 js 或 jquery 将 +20,2 添加到带有点 9990.95 的总和或带有逗号 9990,95 的总和 9990.95 var price = $( '.sum' ).text
我如何编写一个函数来将二维数组中每一行的内容相加?要添加每一列的内容?我的代码(到目前为止): #include using namespace std; const int QUARTER = 4
这个问题在这里已经有了答案: Count the number of set bits in a 32-bit integer (65 个答案) 关闭 8 年前。 我有这段代码可以获取数字的二进制表
创建了一个 Div,在其中我有 label 元素和 input 元素,我想在每个 div 中获得不同的标签值。如何重用我的 div 组件而不是再次编写相同的代码。 我尝试在 Stackoverflow
所以我在构建代码时遇到了这个问题。这个问题 This work is based on operator overloading, you need to build a string calcula
为了好玩并进一步了解 float 的工作原理,我尝试制作一个函数,它接受两个单精度 float ,并将它们相加。 到目前为止,我所做的对于相同符号的数字非常有效,但当数字具有相反的符号时,它就会分崩离
我想添加两个 map 以及以下行为。 如果键存在 -> 将两个键值相加。 如果键不存在 -> 插入对映射。 我看过一些标准库算法。即转换,但似乎没有做我想要的。 取自此LINK template
我的程序中有两个整数;我们称它们为“a”和“b”。我想将它们加在一起并得到另一个整数。这些是常规的 Python int 对象。我在想;我如何将它们与 Twisted 一起添加?某处是否有特殊的 pe
因此,我必须创建这个程序,从文件中读取多个“工资”,然后将所有工资相加以返回一个“总工资”,并计算所有工资的平均值。 我目前拥有的代码如下: package uploadTask7_countingS
我的结果是这样的: +-------+--------+--------+-----+--------------+ | Count | Equipe | IdTeam | Id | Nam
我有以下数据框: df2 = pd.DataFrame({'season':[1,1,1,2,2,2,3,3],'value' : [-2, 3,1,5,8,6,7,5], 'avail':[3,3,
所以我正在过滤数据(所有字符串),并希望显示以下内容: 第一个字母包含您的搜索的搜索词(例如,在搜索 'Br' 时,我想查看所有以 'Br' 开头的词,例如 Break , 坏了,...) 字符串中包
我试图通过以下关系(仅显示父级)来说明一对多关系的总和: @Entity @Table(name = "Parent") public class Parent implements Serializ
我是一名优秀的程序员,十分优秀!