这个问题的动机是当我发现 Mac OS X 内核使用750MB内存容量。
我使用 Linux 已有 20 年了,我一直“知道”内核 RAM 使用量与 X 相形见绌(这是真的吗?曾经是真的吗?)。
因此,经过一番谷歌搜索后,我尝试了一下,slabtop
结果告诉我:
Active / Total Size (% used) : 68112.73K / 72009.73K (94.6%)
这是否意味着我的内核现在正在使用 ~72MB 的 RAM?
(鉴于top
报告Xorg
的 RSS 为 17M,内核现在使 X 相形见绌,而不是相反)。
笔记本电脑的“正常”内核 RAM 使用情况(范围)是多少?
为什么 MacOS 使用的 RAM 比 Linux 多一个数量级?
附言。这里没有回答最后一个问题,所以请参阅相关问题:
答案1
内核这个词有点用词不当。 Linux 内核由多个进程/线程 + 模块 ( lsmod
) 组成,因此要获得完整的了解,您需要查看整个球而不仅仅是单个组件。
顺便说一句,我的显示slabtop
:
Active / Total Size (% used) : 173428.30K / 204497.61K (84.8%)
的手册页slabtop
也有这样的说法:
平板统计标头跟踪正在使用的平板数量,而不是物理内存的度量。 /proc/meminfo 文件中的“Slab”字段跟踪有关已使用的slab 物理内存的信息。
删除缓存
将我的缓存删除为@德罗伯特 建议在您的问题下的评论中,对我有以下作用:
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$
Active / Total Size (% used) : 61858.78K / 90524.77K (68.3%)
发送 3 会执行以下操作:释放页面缓存、目录项和索引节点。我在 U&L 问答中对此进行了更多讨论,标题为:有没有任何方法或工具来转储内存缓存和缓冲区?“。因此,我的 110MB 空间仅用于维护有关页面缓存、目录项和索引节点的信息。
附加信息
- 如果您有兴趣,我发现这篇博客文章对此进行了
slabtop
更详细的讨论。它的标题是:今日 Linux 命令:slabtop。 - 维基百科上更详细地讨论了 Slab 缓存,标题为:板坯分配。
那么我的内核使用了多少 RAM?
这张图片对我来说有点模糊,但以下是我“认为”我们知道的事情。
板坯
我们可以使用这种技术获得 Slab 使用情况的快照。本质上我们可以从 中提取这些信息/proc/meminfo
。
$ grep Slab /proc/meminfo
Slab: 100728 kB
模块
此外,我们还可以通过从以下位置提取这些值来获取内核模块的大小值(不清楚是磁盘上的大小还是 RAM 中的大小)/proc/modules
:
$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758
板信息
有关 SLAB 的许多详细信息都可以在此 proc 结构中访问/proc/slabinfo
:
$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000 0 0 320 25 2 : tunables 0 0 0 : slabdata 0 0 0
fuse_request 100 125 632 25 4 : tunables 0 0 0 : slabdata 5 5 0
fuse_inode 21 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
消息
当你的系统启动时,有一行报告 Linux 内核加载后的内存使用情况。
$ dmesg |grep Memory:
[ 0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)
参考
答案2
这个怎么样:
Active / Total Size (% used) : 4709.24K / 5062.03K
那是在一台刚刚启动的非常小的机器上,无头运行,并带有一个正常内核。 所以不需要太多。
正如 derobert 暗示的那样,内核将利用可用内存进行缓存,这就是您在slabtop
.除了文件缓存之外,这还与不再使用的用户空间进程的可共享内存有关。内核将其留在那里,直到再次需要相同的东西,或者某些东西主动需要 RAM,在这种情况下它会被遗忘。打个比方,就像从书架上取下一本书,将其打开放在桌子上阅读:读完后,可以将书打开放在桌子上,以备需要再次查看时使用。
答案3
在这台运行 Solaris 的 512 GB RAM 服务器上,内核使用 25 GB:
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 3210102 25078 5%
Anon 15266226 119267 23%
Exec and libs 41457 323 0%
Page cache 3539331 27651 5%
Free (cachelist) 13799571 107809 21%
Free (freelist) 30093164 235102 46%
Total 65949851 515233
Physical 65927406 515057
较小的那个有一半以上的 RAM 被内核使用:
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 2149699 16794 52%
Anon 517016 4039 13%
Exec and libs 15420 120 0%
Page cache 21840 170 1%
Free (cachelist) 8768 68 0%
Free (freelist) 1404862 10975 34%
Total 4117605 32168
Physical 4096002 32000
不用担心,未使用的 RAM 无论如何都是浪费的 RAM。