linux高速缓存的使用

linux高速缓存的使用,linux,memory,Linux,Memory,在我的一台服务器上,我有一些内存/磁盘服务, 内存KV的行为类似于memcached,初始化时需要一个大的内存主干(10GB), Disk Kv的行为类似于leveldbd,它的随机读取和顺序写入,并且它经常读取大量文件。 内存都是使用libcmalloc分配的 我的KV服务器进程没有消耗大量内存,如下所示(由于内存不足,我已终止了内存KV,只留下磁盘KV,但可用内存仍会下降): 但是,我的记忆消失了 $free -m total used f

在我的一台服务器上,我有一些内存/磁盘服务, 内存KV的行为类似于memcached,初始化时需要一个大的内存主干(10GB), Disk Kv的行为类似于leveldbd,它的随机读取和顺序写入,并且它经常读取大量文件。 内存都是使用libcmalloc分配的

我的KV服务器进程没有消耗大量内存,如下所示(由于内存不足,我已终止了内存KV,只留下磁盘KV,但可用内存仍会下降):

但是,我的记忆消失了

$free -m

             total       used       free     shared    buffers     cached
Mem:         64552      57778       6774          0         16        326
-/+ buffers/cache:      57435       7117
Swap:            0          0          0
我可以看到平板电脑消耗了我大量的内存,而且它是无法收回的

$cat /proc/meminfo
MemTotal:       66101892 kB
MemFree:         6816228 kB
Buffers:           17024 kB
Cached:           456640 kB
SwapCached:            0 kB
Active:         19697712 kB
Inactive:        3197312 kB
Active(anon):   19546504 kB
Inactive(anon):  2875632 kB
Active(file):     151208 kB
Inactive(file):   321680 kB
Unevictable:          48 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:              6612 kB
Writeback:            72 kB
AnonPages:      22421152 kB
Mapped:            54408 kB
Shmem:               332 kB
Slab:           28870400 kB
SReclaimable:     213344 kB
SUnreclaim:     28657056 kB
KernelStack:       30000 kB
PageTables:        62776 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    33050944 kB
Committed_AS:   37517224 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      388624 kB
VmallocChunk:   34324313700 kB
HardwareCorrupted:     0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        5696 kB
DirectMap2M:     2082816 kB
DirectMap1G:    65011712 kB
这是板坯信息

$slabtop -s c

OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME  
69842766 69838389  38%    0.19K 1663025       42  13304200K kmalloc-192
69314912 69314796  38%    0.12K 2166091       32   8664364K kmalloc-128
70866624 70866323  39%    0.06K 1107291       64   4429164K kmalloc-64
69299968 69299592  38%    0.03K 541406      128   2165624K kmalloc-32
128388  72434  56%    0.99K   4230       32    135360K ext4_inode_cache
208782  94112  45%    0.19K   4971       42     39768K dentry
我不明白什么会消耗大量内存,为什么会这样,以及如何解决这个问题

这可能是一个间隔内核错误吗


或者这是一个glibc问题,由于频繁的磁盘读取,它不会将内存返回到系统?

以及top、free和slabtop提供的摘录

看起来你的内核正在消耗内存 平板:28870400 kB

找到这一点最简单的方法是

  • 做一个Top,做一个RES内存的和(RAM上的驻留内存),Top只给出用户的内存视图

  • 做一个free-m,看看有多少内存是空闲的和被使用的(给定的内核+用户是空闲的)。总内存上限与free命令中定义为free的内存之间的差异不应超过1 GB


  • “是时候升级你的操作系统版本了”

    看起来你的发行版有点旧,但没关系。不要听别人说在查看
    uname-a
    输出之前必须升级。不过,如果你能提供它就好了

    在较新版本的服务器和桌面发行版中,free命令输出和
    /proc/meminfo
    又包含了一行,目的是完全消除您所遇到的各种混淆。行名称在
    /proc/meminfo
    中为“MemAvailable”,在
    free
    输出中为“available”

    free-m
    中的“free”列并没有以人类理解的方式显示空闲内存(因此
    /proc/meminfo
    中的“MemFree”行)。它不排除内核的页面缓存和其他缓存,这些缓存并没有以人类理解的方式“使用”

    这是第一件事。如果您认为我错了,并且正确理解了
    免费
    输出,请尝试:
    echo 3>/proc/sys/vm/drop\u caches
    ,然后查看内存使用情况。在以root用户身份执行该命令后,请提供
    free
    的输出


    如果仍然那么糟糕,请阅读:。它说您的内核可能需要升级。

    通常当有人问“我的Linux内存都到哪里去了”时,答案是“磁盘缓存,这不是问题”,但我不知道这里是否是这样。服务器故障可能是一个更好的问题。也许看看这个问题:所引用的serverfault问题涉及高sreRecreatable,这与SunRecreatable是完全不同的,这似乎是这里的问题所在。我现在正在研究一个类似的问题,其中64、128和192字节的SOA分配似乎正在“泄漏”。这是一个老问题,但如果我发现任何问题,我会向您报告。同时,如果有人知道Linux中SOA分配是如何泄露的,我会喜欢你的想法。@J.Paulding我也在调查类似的问题。你找到的任何东西,到目前为止,除了死胡同什么都没有。我所看到的最好的热情线索似乎是将增长与一个运行在cron作业上的名为S3Cmd的python工具联系起来。由于其他原因,我们已经更改了服务器上的技术堆栈,目前没有问题。但我从来没有找到一把冒烟的枪。很抱歉我很想知道你有没有进步!
    $slabtop -s c
    
    OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME  
    69842766 69838389  38%    0.19K 1663025       42  13304200K kmalloc-192
    69314912 69314796  38%    0.12K 2166091       32   8664364K kmalloc-128
    70866624 70866323  39%    0.06K 1107291       64   4429164K kmalloc-64
    69299968 69299592  38%    0.03K 541406      128   2165624K kmalloc-32
    128388  72434  56%    0.99K   4230       32    135360K ext4_inode_cache
    208782  94112  45%    0.19K   4971       42     39768K dentry