当我发现 Mac OS X 内核使用750MB的 RAM时,我震惊了这个问题。
我已经使用 Linux 20 年了,我一直“知道”内核 RAM 使用量与 X 相形见绌(这是真的吗?它曾经是真的吗?)。
所以,经过一些谷歌搜索后,我尝试slabtop告诉我:
Active / Total Size (% used) : 68112.73K / 72009.73K (94.6%)
Run Code Online (Sandbox Code Playgroud)
这是否意味着我的内核现在正在使用 ~72MB 的 RAM?
(鉴于top报告Xorg的 RSS 为 17M,内核现在使 X 相形见绌,而不是相反)。
笔记本电脑的“正常”内核 RAM 使用量(范围)是多少?
为什么 MacOS 使用的 RAM 比 Linux 多一个数量级?
附注。这里没有回答最后一个问题,所以请参阅相关问题:
slm*_*slm 45
内核有点用词不当。Linux 内核由多个进程/线程 + 模块 ( lsmod) 组成,因此要获得完整的图片,您需要查看整个球,而不仅仅是单个组件。
顺便说一下,我的显示slabtop:
Active / Total Size (% used) : 173428.30K / 204497.61K (84.8%)
Run Code Online (Sandbox Code Playgroud)
的手册页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%)
Run Code Online (Sandbox Code Playgroud)
发送 3 会执行以下操作:空闲页面缓存、dentries 和 inode。我在此 U&L 问答中对此进行了更多讨论,标题为:是否有任何方法或工具可以转储内存缓存和缓冲区?"。所以我的 110MB 空间仅用于维护有关页面缓存、目录项和 inode 的信息。
slabtop了更多细节。它的标题是:Linux 今日命令:slabtop。这张照片对我来说有点模糊,但这里是我“认为”我们知道的事情。
我们可以使用这种技术获取 Slab 使用情况的快照。基本上我们可以从/proc/meminfo.
$ grep Slab /proc/meminfo
Slab: 100728 kB
Run Code Online (Sandbox Code Playgroud)
此外,我们可以通过从/proc/modules以下位置提取这些值来获取内核模块的大小值(不清楚它是从磁盘还是在 RAM 中的大小):
$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758
Run Code Online (Sandbox Code Playgroud)
在这个 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
Run Code Online (Sandbox Code Playgroud)
当您的系统启动时,有一行报告 Linux 内核加载后的内存使用情况。
$ dmesg |grep Memory:
[ 0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)
Run Code Online (Sandbox Code Playgroud)
这个怎么样:
Active / Total Size (% used) : 4709.24K / 5062.03K
Run Code Online (Sandbox Code Playgroud)
那是在一台新启动的、非常小的机器上,使用普通内核无头运行。 所以不需要太多。
正如 derobert 所暗示的那样,内核将使用可用内存进行缓存,这就是您在slabtop. 除了文件缓存之外,这还与不再使用的用户空间进程的可共享内存有关。内核将它留在那里,直到再次需要相同的东西,或者某些东西主动需要 RAM,在这种情况下它会被遗忘。打个比方,从书架上取一本书,打开放在桌子上阅读:当你读完后,你可以把书打开放在桌子上,以防你需要再看一遍。
在这个运行 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
Run Code Online (Sandbox Code Playgroud)
那个较小的有一半以上的 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
Run Code Online (Sandbox Code Playgroud)
没什么可担心的,不管怎样,未使用的 RAM 都是浪费的 RAM。
| 归档时间: |
|
| 查看次数: |
71964 次 |
| 最近记录: |