大多数情况下,当我的计算机开始需要交换时,我会看到 CPU 使用率大幅上升(kswapd0
持续使用 99%-100% 的 CPU)。根据top
,时间花在sy
(系统/内核)上,而不是wa
(IO 等待)上。
我在具有 2GB RAM 和 6GB SSD 交换空间的 C720 上运行 Linux 4.0.4-2-ARCH。
无论是否打开丢弃页面(TRIM),我似乎都遇到了这个问题。
我应该检查或调整哪些设置来查看是否可以修复此问题?
有什么方法可以调试该问题吗?类似strace
内核线程的方法?
使用默认 Arch Linux 设置运行:
/proc/sys/vm/swappiness
= 60
/proc/sys/vm/vfs_cache_pressure
= 100
/sys/kernel/mm/transparent_hugepage/enabled
=[always] madvise never
答案1
答案2
我有一台 C720,在 Ubuntu 14.04.1 LTS 上运行 Linux 内核 4.4.0,具有 2 GB RAM 和 2 GB 交换空间。
假设 Chrome/Chromium 使用量很大,以下是一些提高系统性能的方法:
- 编辑
/etc/default/grub
并添加以下内核参数到该GRUB_CMDLINE_LINUX_DEFAULT
行:elevator=noop
zswap.enabled=1
transparent_hugepage=madvise
- 跑步
sudo update-grub2
。 - 编辑
/etc/sysctl.conf
并附加以下内容:vm.swappiness=25
# ~ max(RES 输入top
)*2 / RAM = 500 MB / 2 GBvm.vfs_cache_pressure=1000
# 比定期删除缓存更安全
- 重启。
您可以像这样验证更改:
$ dmesg | grep -i noop
[ 0.694680] io scheduler noop registered (default)
$ dmesg | grep -i zswap
[ 0.724855] zswap: loaded using pool lzo/zbud
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
$ sysctl vm.swappiness
vm.swappiness = 25
$ sysctl vm.vfs_cache_pressure
vm.vfs_cache_pressure = 1000
更新
在步骤 #3 中增加vm.min_free_kbytes
可能会有所帮助。尝试使用 (128 MB) 的值131072
。最后的结论是,在内存不足的情况下,桌面上的 Linux 性能不佳。有人建议将 Chrome/Chromium 放在 中cgroup
,但这超出了本答案的范围。
答案3
我不确定为什么没有人提出这个答案:killall -9 kswapd0
我遇到了这个问题,kswapd0
进程以非 root 用户身份运行,并且该用户很长时间没有登录。我已终止此进程,问题不再出现。
不,这并不能解决根本问题(它一开始是怎么达到 100% 的),但可以让您快速恢复系统的使用。
答案4
kswap内核用于分配和释放内存页,如果你使用交换,你会看到这个内核线程使用了这么多的CPU时间,那就说明kswap内核线程正在扫描内存页以交换一些页面并满足内存分配请求。
我认为在这种情况下删除缓存没有帮助,因为当操作系统出现内存紧张的情况时内核会自动回收缓存。
如果你没有任何内存问题并使用该free
命令,你会看到很多内存被用作缓存,但是如果你有内存问题,Linux 会减少缓存以满足内存分配请求,而无需删除缓存
您可以使用sar -B
和查找majft
和pgscank
值,查找其他值man sar