zoukankan      html  css  js  c++  java
  • Linux内存平均占用率

    最近有个项目需要对内存平均占用率进行打点,Linux下内存相关信息可以执行从/proc/meminfo文件中获取,如下:

    flycatorg@flycatorg:~$ cat /proc/meminfo
    MemTotal:         509448 kB
    MemFree:           23816 kB
    Buffers:          172636 kB
    Cached:           151636 kB
    SwapCached:            0 kB
    Active:           123484 kB
    Inactive:         335476 kB
    Active(anon):      57340 kB
    Inactive(anon):    82664 kB
    Active(file):      66144 kB
    Inactive(file):   252812 kB
    Unevictable:           8 kB
    Mlocked:               8 kB
    HighTotal:             0 kB
    HighFree:              0 kB
    LowTotal:         509448 kB
    LowFree:           23816 kB
    SwapTotal:        409616 kB
    SwapFree:         409616 kB
    Dirty:                 0 kB
    Writeback:             0 kB
    AnonPages:        134696 kB
    Mapped:            55304 kB
    Slab:              16508 kB
    SReclaimable:      10076 kB
    SUnreclaim:         6432 kB
    PageTables:         2220 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:      664340 kB
    Committed_AS:     423668 kB
    VmallocTotal:     503864 kB
    VmallocUsed:       19020 kB
    VmallocChunk:     479952 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       4096 kB
    DirectMap4k:       12224 kB
    DirectMap4M:      512000 kB

    flycatorg@flycatorg:~$

    计算内存占用率,需要使用MemTotalMemFreeBuffersCached四项指标。

    内存平均占用率 = 100 * (1 - 空闲内存/总内存),总内存就是MemTotal,主要是空闲内存的计算方法,最常见的错误认识MemFree就是空闲内存。

    查阅了网上的各种说法,大家普遍认可的空闲内存计算方法为:若Cached大于MemTotal,空闲内存为MemFree;否则空闲内存为MemFree+Buffers+Cached

    其实关于这个,我们通过free命令可以也可以得出结论:

     flycatorg@flycatorg:~$ free -k
                 total       used       free     shared    buffers     cached
    Mem:        509448     485660      23788          0     172636     151636
    -/+ buffers/cache:     161388     348060
    Swap:       409616          0     409616
    flycatorg@flycatorg:~$

    第一行:内存的相关指标,其中total = used + free

    第二行:内存实际使用情况,其中free = 第一行的 (free + buffers + cached),因为分配了的buffers和cahce,不一定都被在使用,还是可以被回收的。

    至于Cached大于MemTotal的场景,目前还没有彻底搞清楚,大概意思是:任何块设备都可以做Cache,当频繁访问某一个大文件时,Cahced就会很大,有时候会是好几个G,此时Cahced占用的应该不是内存。

    ——这个还是等我彻底搞清楚了再写吧。

  • 相关阅读:
    数据库操作
    jquery 第一章
    算法很美 第一章
    python 学习第四天
    python学习第三天
    python学习第二天
    学习python的第一天
    C#-线程
    C#-流、存储
    C#-集合
  • 原文地址:https://www.cnblogs.com/flycatorg/p/3297802.html
Copyright © 2011-2022 走看看