除了缓存,Linux 内核还使用大量内存做什么?

Eri*_*rik 7 performance linux-kernel ram

我的电脑感觉真的很慢。根据free,我只剩下大约 200M 的 RAM,并且必须换出超过 1GB 的内存。我知道如果内存用于缓存是好的,但这看起来我的内存真的很低。

root@desktop:/proc free -h
               total       used        free      shared  buff/cache   available
Mem:           3.9G        3.4G        132M         44M        378M        213M
Swap:          8.0G        1.2G        6.7G
Run Code Online (Sandbox Code Playgroud)

smem -tk报告说应用程序最多使用 2GiB(RSS 列)。smem -wk占所有使用的内存。显然内核使用 1.8GiB 不是为了缓存:

root@desktop:/proc smem -wk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.9G      74.3M       1.8G 
userspace memory               1.8G     250.9M       1.6G 
free memory                  173.9M     173.9M          0 
Run Code Online (Sandbox Code Playgroud)

这种行为是否符合预期,如果是,内核需要这么多内存用于什么任务?

zer*_*eux 0

我不知道你为什么编辑free -h缺少该行的输出命令-/+ buffers/cache- 这很重要。无论如何我们可以继续。

只要“Free”列(在 Mem: 行上)>0,您的 RAM 就不会真正不足,因为这是绝对未使用的 RAM。众所周知,Linux 会使用它可以获得的所有 RAM(作为缓存,希望获得更好的性能)。

交换部分并没有说出全部真相:将大量代码+数据交换到磁盘是很常见的,因为它只运行一次并且有一段时间没有使用。Linux 的另一部分显示了它对 RAM 的性能的贪婪:它迅速踢掉了可能不重要的东西(同样,性能方面)。它是可调的(sysctl vm.swappiness),但大多数发行版默认为“毫不犹豫地交换”。

确认您的假设(由于缺乏可用 RAM 而缓慢)的重要因素是当前是否正在换入或换出到磁盘。大多数时候,很容易将迟缓与计算机上疯狂闪烁的磁盘联系起来。否则,运行top并查看交换数据随时间的演变。更简单的是,vmstat 1直接打印每秒的交换IO数据(swap si/so)。