内核使用多少RAM?


46

当我发现Mac OS X内核使用750MB RAM 时我震惊了这个问题。

我使用Linux已有20年了,我总是“知道”内核RAM的使用量与X相形见((是真的吗?曾经是真的吗?)。

因此,经过一番谷歌搜索后,我尝试slabtop告诉我:

Active / Total Size (% used)       : 68112.73K / 72009.73K (94.6%)

这是否意味着我的内核现在正在使用约72MB的RAM?

(鉴于top报告Xorg的RSS为17M,内核现在使X相形见,,而不是相反)。

笔记本电脑的“正常”内核RAM使用量(范围)是多少?

为什么MacOS使用的内存要比Linux多一个数量级?

PS。这里没有答案解决了最后一个问题,因此请查看相关问题:


在我的机器上,它报告将近2GB ...但是当您查看详细信息时,它们都与文件系统缓存有关。
derobert 2013年

2
确实,如果我执行echo 3 > /proc/sys/vm/drop_caches,则仅使用了80MB。
derobert

根据您提供的链接中的注释,kernel_task记帐中包含集成图形硬件使用的内存。
罗素·博罗戈夫

Answers:


38

内核有点用词不当。Linux内核由多个进程/线程+模块(lsmod)组成,因此要获得完整的图片,您需要查看整个过程,而不仅仅是一个组件。

顺便说一句我的节目slabtop

 Active / Total Size (% used)       : 173428.30K / 204497.61K (84.8%)

手册页slabtop也有这样的说法:

slabtop统计信息标头跟踪正在使用的slab字节数,而不是对物理内存的度量。/ proc / meminfo文件中的'Slab'字段正在跟踪有关已使用的Slab物理内存的信息。

删除缓存

按照您的问题下的注释中@derobert的 建议删除我的缓存对我有以下好处:

$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$

 Active / Total Size (% used)       : 61858.78K / 90524.77K (68.3%)

发送3将执行以下操作:免费的页面缓存,牙科和inode。我将在标题为“ U&L”的U&L问答中对此进行更多讨论:是否有任何方法或工具可以转储内存缓存和缓冲区?“。因此,仅维护有关页面缓存,牙科和索引节点的信息就占用了我110MB的空间。

附加信息

  • 如果您有兴趣,我发现此博客文章讨论slabtop了更多详细信息。标题为:今日的Linux命令:slabtop
  • Slab缓存在Wikipedia上更详细地讨论,标题为: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

Slabinfo

可在以下proc结构中访问有关SLAB的许多详细信息/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

Dmesg

当系统启动时,会有一行报告Linux内核在加载后的内存使用情况。

$ dmesg |grep Memory:
[    0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)

参考文献


1
反正有完整的图片吗?
吉尔斯2013年

@Gilles-使用了多少内存,对吗?我似乎还记得关于此的问题,对吗?
slm

@Gilles-我认为这与您要询问的内容很接近grep Slab /proc/meminfo
slm

@Gilles-还有一个:/proc/slabinfo,它似乎是的来源slabtop,因此可以从此处计算金额以获得更准确的总数。
slm

1
的第2列/proc/modules更有可能被加载到内存中的模块大小,因为通常压缩了磁盘上的模块(例如,在Fedora 27上是xz),我已经检查了tg3NIC驱动程序,磁盘上的大小(压缩的还是原始文件的大小)与中显示的字节大小不匹配/proc/modules
Terry Wang

7

这个怎么样:

Active / Total Size (% used)       : 4709.24K / 5062.03K

那是在刚启动的非常小的计算机上运行的,该计算机无头运行且具有正常内核。 因此它不需要太多。

正如derobert所暗示的那样,内核将利用可用内存进行缓存,这是您在中看到的很多东西slabtop。除了文件高速缓存之外,这还与不再使用的用户空间进程中的可共享内存有关。内核将其保留在那里,直到再次需要相同的东西,或者其他东西主动需要RAM,在这种情况下,它被遗忘了。打个比方,就是将一本书从架子上取下来,放在书架上,以便在桌子上阅读:完成阅读后,您可以将书本放在桌子上,以备不时之需。


4

在运行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。


1
请描述您如何实现输出。
Maus

通过echo ::memstat | mdb -k在更新10/09之前的某些Solaris 10生产服务器上运行@Maus 。
jlliagre
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.