最近有几次我注意到我的笔记本电脑运行速度有点慢,磁盘指示灯闪烁很多。我的笔记本电脑是 i7 处理器,配备 SSD 和 12GB RAM,因此我并不认为浏览时速度会太慢。
最后一次,它让我很烦,所以我快速查看了系统监视器 (KSysGuard),它显示我的 2GB 交换分区已 100% 使用,但物理内存只有 4.8GB(总内存为 11.6GB)(图表显示为 4.8GB)。所以我想尝试通过关闭并再次打开来清空交换分区(swapoff -a
, swapon -a
),但由于内存不足,swapoff 失败。
这让我很困惑,因为根据 KSysGuard 的说法,我应该有大约 7GB 的空闲空间,所以我想看看 top 会说什么。Top 显示大约有 150MB 的可用 RAM 和 2048/2048MB 的交换空间正在使用中。难怪它运行得有点慢!
为什么 KSysGuard 会如此少报告内存使用情况,我怎样才能让它不再报告错误?
答案1
根据评论,我使用以下命令将交换文件从 2GiB 增加到 6GiB:
sudo swapoff -a
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=6144
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
分别地,上述命令通过将页面移回物理内存来关闭交换,删除交换文件,创建一个名为 swapfile 的新 6GiB 文件,将权限设置为仅 root,配置文件以用于交换,最后使用新文件重新打开交换。
然后,我vm.swappiness=70
在倒数第二部分的末尾添加了内容,/etc/sysctl.conf
以使页面文件的交换稍微更加积极(节省一些物理内存)。
然而,要真正回答为什么 KSysGuard 似乎在使用的 RAM 数量方面撒谎,那是因为默认的“内存和交换历史记录”图表实际上只显示来自“应用程序内存”传感器的数据。为了解决这个问题,我在 KSysGuard 中添加了一个名为“内存”的选项卡,并包含了 2 个图表 - 一个用于物理内存,一个用于交换。物理内存图配置了以下传感器:已用内存、可用内存、缓冲内存、缓存内存。实际上只需要使用和缓存,但使用指标会告诉您实际使用了多少内存。
答案2
来自评论...
注意:请记住未使用的 RAM 用于文件和磁盘缓冲区。
真正的问题是您的 2G 交换空间太小,并且您的磁盘正在抖动。
我会将您的交换增加到至少 6G,并将您的 vm.swappiness 从默认值 60 修改为 80。
要测试 vm.swappiness 的各种设置,请使用sudo sysctl vm.swappiness=80
。vm.swappiness 值大于默认值 60 时,会更多地使用交换空间。小于 60 的值会更多地使用 RAM。
为了使其永久生效,请在最后编辑/etc/sysctl.conf
并添加,然后重新启动。vm.swappiness=80