内核使用了多少 RAM?

内核使用了多少 RAM?

这个问题的动机是当我发现 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。

相关内容