小编Hal*_*aar的帖子

哪些内存未被进程使用并由 `echo 3 > /proc/sys/vm/drop_caches` 释放?

在没有打开程序的情况下,我的电脑使用了大约 512M 的内存。昨天,我没有打开任何东西,但使用了 2 GB 内存(已使用 - 缓存 = 2153):

             total       used       free     shared    buffers     cached
Mem:          3261       2875        386         30        199        523
-/+ buffers/cache:       2153       1108
Swap:         8187          0       8187
Run Code Online (Sandbox Code Playgroud)

Top 显示没有处理此问题的进程:

top - 23:10:38 up 1 day, 14:35,  3 users,  load average: 0,31, 0,94, 1,29
Tasks: 172 total,   3 running, 169 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6,5 us,  4,2 sy,  0,0 ni, 89,1 id,  0,1 wa,  0,0 hi,  0,1 si,  0,0 st
KiB Mem:   3340164 total,  2937728 …
Run Code Online (Sandbox Code Playgroud)

linux memory cache

7
推荐指数
1
解决办法
1188
查看次数

Linux 中文件系统元数据的缓存方式和位置

我之前的问题显然有一个错误的前提。我认为文件系统元数据缓存在 inode 和 dentry 缓存中,但显然不是。

当我做:

# time find . > /dev/null

real    10m4.435s
user    0m3.904s
sys     0m15.505s

# time find . > /dev/null

real    0m5.681s
user    0m1.400s
sys     0m4.224s
Run Code Online (Sandbox Code Playgroud)

您可以看到第二次运行要快得多。但是,当我仅释放页面缓存时,它会恢复为 10 分钟:

echo 1 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

Slabtop 删除这些缓存后仍然显示一个大缓存:

   OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
1758897 1758713  99%    0.19K  83757       21    335028K dentry
1216908 1211861  99%    0.76K  57948       21    927168K ext3_inode_cache
Run Code Online (Sandbox Code Playgroud)

无论如何,我不明白它是如何工作的,因为在删除所有缓存 ( echo 3 > /proc/sys/vm/drop_caches) 之后,slabtop仍然报告了一个很大的缓存大小:

  OBJS ACTIVE …
Run Code Online (Sandbox Code Playgroud)

linux filesystems cache

6
推荐指数
2
解决办法
1398
查看次数

标签 统计

cache ×2

linux ×2

filesystems ×1

memory ×1