ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux系统内存使用率该怎么计算

2021-03-13 10:52:01  阅读:290  来源: 互联网

标签:available meminfo cache free 内存 Linux 使用率 proc


Linux系统内存使用率该怎么计算

郝朝阳 DevOps视角

前言

由于公司逐步使用自己研发的基于docker的云平台,所以监控系统逐步由open-falcon迁移到Prometheus。我写了自动分析各个业务线一个月内服务器性能,并在每天早上10点30分自动发送给相关业务线负责人。数据通过Prometheus的API获取的。其中内存使用率存在很大的分歧。两个平台使用的计算方式很不一样,并且业务方也经常问这个问题。
open-falcon的内存使用率计算方式为:(memtotal-(free+buffer+cache))/memtotal
Prometheus的内存使用率计算方式为:(memtotal-available)/memtotal
下面是同一台机器,两个平台按照各自的算法一天内的内存使用曲线图
Linux系统内存使用率该怎么计算
open-falcon平台显示的内存使用率
Linux系统内存使用率该怎么计算
Prometheus平台按照(memtotal-available)/memtotal计算方法得出的曲线图
Linux系统内存使用率该怎么计算
Prometheus平台按照(memtotal-(free+buffer+cache))/memtotal计算方法得出的曲线图,和open-falcon平台的曲线图能够保持一致。

理解内存指标

要想知道哪种计算方式更适合,就需要对内存的指标有正确的理解。

free

free手册对free的定义如下:


free   Unused memory (MemFree and SwapFree in /proc/meminfo)

free是未使用的内存,对应的/proc/meminfo的MemFree。
proc手册对MemFree的定义为:


MemFree %lu
   The sum of LowFree+HighFree.

buffer和cache

要想知道到底使用哪个公式计算比较合适,这就要先理解内存的各项指标的含义。首先来理解buffer和cache。
通过free的手册可以找到buffer和cache的介绍:


buffers    Memory used by kernel buffers (Buffers in /proc/meminfo)

cache  Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)

可以知道:

  • Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo中的buffers的值
  • Cache是内核页缓存和Slab用到的内存,对应的是/proc/meminfo的Cached与Slab之和
    这里只告诉我们通过free获取的值都来自/proc/meminfo,单更具体的Buffers、Cached和Slab的含义,还是没有说详细。怎么知道更详细的定义呢?我们可以看下proc文件系统手册。

Buffers %lu
    Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).

Cached %lu
     In-memory cache for files read from the disk (the page cache).  Doesn't include SwapCached.

.....
Slab %lu
    In-kernel data structures cache.
SReclaimable %lu (since Linux 2.6.19)
    Part of Slab, that might be reclaimed, such as caches.
SUnreclaim %lu (since Linux 2.6.19)
    Part of Slab, that cannot be reclaimed on memory pressure.     

通过proc文件系统的文档我们可以知道:

  • Buffers是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据的,通常不会太大(20M左右)。
  • Cached是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。并且不包括 SwapCached。
  • slab包括SReclaimable和SUnreclaim两部分。可回收的用SReclaimable不可回收的是SUnreclaim记录。

对于buffer和cache进行总结的话,可以理解为buffer是对磁盘数据的缓存,cache是文件数据的缓存。

available

free手册对available的介绍:


available    Estimation of how much memory is available for starting new applications, without swapping. Unlike the  data  provided  by the  cache or free fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use (MemAvailable in  /proc/meminfo,  available  on  kernels  3.14,  emulated  on  kernels 2.6.27+, otherwise the same as free)

可以知道,available是在不swap的情况下,评估要启动一个新的应用时有多少内存可以使用。并也把页缓存和正在使用的可以回收的内存部分考虑进去了。对应的是/proc/meminfo的MemAvailable的值。此时可以得出一个结论:available是包括系统中虽然已经使用但是可以回收的内存。比如cache、buffer和slab中都有一部分可以回收。

MemAvailable的定义如下:


An estimate of how much memory is available for starting new applications, without swapping. Calculated from MemFree, SReclaimable, the size of the file LRU lists, and the low watermarks in each zone.  The estimate takes into account that the system needs some page cache to function well, and that not all reclaimable slab will be reclaimable, due to items being in use. The impact of those factors will vary from system to system.

可以得到这样的一个结论:MemAvailable约等于MemFree+Buffers+Cached,但两者并不相等。MemAvailable相对较小。

结论

从上面的各个内存项目的介绍来说,在应用层面来评估可以内存使用MemAvailable更合适。因此,内存使用率采用(memtotal-available)/memtotal的计算方式是最适合评估系统能否再启动一个新应用的。

标签:available,meminfo,cache,free,内存,Linux,使用率,proc
来源: https://blog.51cto.com/15127511/2657921

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有