我们一直在努力为运行 Docker 组件的节点创建良好的内存监控。我们将 Prometheus 与 cadvisor 和 node_exporter 结合使用。
确定每个节点已用内存的最佳方法是什么?
方法 1:在我们的示例中给出大约 42%
(1-(node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes))*100
方法 2 : 大约 80%
(1-((node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes))*100
Q2:为什么会有这种差异?我能从中学到什么?
因此,我对确定的各个指标进行了更深入的研究:
空闲内存:在我们的实验中约为 5%
(node_memory_MemFree_bytes/node_memory_MemTotal_bytes)*100
缓冲内存:约 0.002%
(node_memory_Buffers_bytes/node_memory_MemTotal_bytes)*100
缓存内存:约 15%
(node_memory_Cached_bytes/node_memory_MemTotal_bytes)*100
可用内存:58%
(node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)*100
我希望 FreeMem + BufferedMem + CachedMem 会在 AvailableMem 周围。但这不是这个简单实验的结果。
Q3:为什么这不是真的?
据说Linux上的空闲内存由free mem + buffered mem + cached mem组成。当内存不足时,可以释放缓存的内存等。