我遇到了一个问题,Linux 似乎在使用交换而不是 RAM。对我来说,这似乎触发了一个错误,因为:
- 交换似乎是用于存储经常使用的数据,而不是很少使用的数据。
- 整个电脑似乎对任何命令的响应都很慢(例如打开开始菜单、切换窗口、启动新终端等)。
- 当我剩余 28GB(二十八)RAM(已使用 4GB)时,交换内存使用率为 100%
- 交换空间用于我刚刚启动的应用程序(例如 chrome、R-studio),因为当我启动这些应用程序时它会增加,而当我关闭它们时它会被释放。
有没有办法力量Linux 停止使用交换来分配新内存?我已将交换量设置为 0。
编辑:在我提出问题之前,我通过更改了 swappiness sudo sysctl vm.swappiness=0
,并在 中将更改永久化/etc/sysctl.conf
。这没有什么区别。我没有重新启动我的电脑,因为我有作业在运行,但正常运行时间只有 3 天。
$ cat /proc/sys/vm/swappiness
0
$ uptime
09:08:54 up 3 days, 6 min, 1 user, load average: 1.90, 2.23, 2.45
$ uname -a
5.4.0-72-generic #80~18.04.1-Ubuntu SMP Mon Apr 12 23:26:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ free -m
total used free shared buff/cache available
Mem: 32022 1891 229 610 29901 29069
Swap: 2047 988 1059
EDIT2:我正在针对 postgresql DB 运行 SQL 脚本。该脚本很长,但仅由一些将数据转储到 csvs 的语句组成\copy(select ...)
。我想不是 psql 在敲打交换,而是内核决定使用哪个内存?
答案1
将 swappiness 设置为零后,您可以尝试:
sudo swapoff -a && sudo swapon -a
将交换空间转移到内存而无需重新启动计算机。