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

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

我的电脑感觉非常缓慢。根据free,我只剩下大约 200M RAM,并且必须换出超过 1GB 的内存。我知道使用内存进行缓存是件好事,但这看起来我的 RAM 确实不足。

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

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 

这种行为是否是预期的?如果是,内核需要这么多内存来完成什么任务?

答案1

你也可以尝试这个:

使用萨尔报告一段时间内的上下文切换和 irq 使用情况。 Sar 是一个很棒但闻所未闻的系统监控工具。运行一天,然后使用各种报告来查找异常情况。

脚步:

安装 sysstat 软件包。设置 cron 作业(检查/etc/cron.d/是否存在这样的文件),如下所示:

* * * * * root /usr/lib64/sa/sa1 -S XALL 10 6

这将创建大量数据-- 每天大约 300 MB。它将拍摄系统统计信息的快照每 6 秒。 (您可以通过将“10 6”更改为“2 30”将频率降低到每分钟两次)

如果更改捕获频率,则应删除当天的文件/var/log/sa/sa$(date +%d)- 否则报告可能会损坏。

好的,捕获数据后,尝试这些(提示:始终通过管道less):

sar -q

获取平均负载和运行队列大小。如果这些时间较低,则查看 IO 等待时间:

sar -P ALL

如果您没有看到 %iowait 中的跳跃或 %idle 中的低谷,那么请检查上下文切换:

saw -w

在大部分空闲的系统上,每秒 500 次上下文切换是很正常的。

您可以通过指定活动文件、给出开始时间和结束时间(分别为-s <hh:mm:ss>-e <hh:mm:sss>)以及可选的间隔时间-i <secs>(必须大于由 cron 作业设置的捕获分辨率)来限制 sar 报告。

例子:

sar -f /var/log/sa/sa$(date +%d -d yesterday) -s 09:15:00 -e 12:15:00 -i 600

从昨天的 9:15 到 12:15 之间,每隔 10 分钟就会为您提供 CPU 的摘要信息。

还有更多...更多。您可以man sar获取该信息。

答案2

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

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

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

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

相关内容