我们一直在努力为运行Docker组件的节点创建一个良好的内存监视。我们使用普罗米修斯与顾问和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))*100Q2:为什么会有这种区别?我能从中学到什么?
因此,我更深入地研究了具体的衡量标准:
(node_memory_MemFree_bytes/node_memory_MemTotal_bytes)*100
(node_memory_Buffers_bytes/node_memory_MemTotal_bytes)*100
(node_memory_Cached_bytes/node_memory_MemTotal_bytes)*100
(node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)*100
我希望FreeMem + BufferedMem + CachedMem会出现在AvailableMem周围。但这不是这个简单实验的结果。
Q3:为什么这不是真的?
据说Linux上的空闲内存由空闲mem +缓冲mem +缓存mem组成。当内存不足时,缓存的内存可以被释放,等等。
发布于 2021-04-28 14:20:48
本文档详细说明了这些数字意味着什么:https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst#meminfo
MemAvailable:估计有多少内存可用于启动新应用程序,而不进行交换。根据MemFree、SReclaimable、文件LRU列表的大小以及每个区域中的低水印进行计算。估计数考虑到系统需要一些页面缓存才能正常工作,而且由于正在使用的项目,并不是所有可收回的板子都可以收回。这些因素的影响因系统而异。
因此,MemAvailable是一种估计,无需将替换为新进程,就可以使用多少内存。FreeMem只是计算成MemAvailable的一个部分。BufferedMem和CachedMem可能会被考虑进来,但这些只是内存中可能被回收的一小部分:
缓冲区:对于原始磁盘块的相对临时存储不应该获得巨大的缓存(大约20‘t):内存中的缓存用于从磁盘读取的文件(分页缓存)。不包括SwapCached
https://stackoverflow.com/questions/61751232
复制相似问题