答案1
每天运行一次此脚本:
#!/bin/sh
sync
echo 1 >/proc/sys/vm/drop_caches
sync
echo 2 >/proc/sys/vm/drop_caches
sync
echo 3 >/proc/sys/vm/drop_caches
mem=$(LC_ALL=C free | awk '/Mem:/ {print $4}')
swap=$(LC_ALL=C free | awk '/Swap:/ {print $3}')
echo $mem
echo $swap
if [ $mem -lt $swap ]; then
echo "ERROR: not enough RAM" >&2
exit 1
fi
swapoff -a &&
swapon -a
答案2
交换并不坏,禁用交换才是. 阅读“为什么我需要交换”段落。
话虽如此,运行此命令来关闭交换然后重新打开它,本质上就是清除交换。
sudo swapoff -a && sudo swapon -a
您可以编写脚本定期执行此操作
创建文件
sudo nano /usr/local/sbin/swap2ram.sh
粘贴此代码
#!/bin/sh
mem=$(LC_ALL=C free | awk '/Mem:/ {print $4}')
swap=$(LC_ALL=C free | awk '/Swap:/ {print $3}')
if [ $mem -lt $swap ]; then
echo "ERROR: not enough RAM to write swap back, nothing done" >&2
exit 1
fi
swapoff -a &&
swapon -a
使可执行
sudo chmod +x /usr/local/sbin/swap2ram.sh
此时,您可以运行以下命令将交换转储回内存(如果有足够的可用内存)
执行脚本
sudo /usr/local/sbin/swap2ram.sh
创建一个 cronjob 每小时运行一次(选择自己的偏好)
sudo crontab -e
@hourly /usr/local/sbin/swap2ram.sh
查看日志
grep CRON /var/log/syslog
我的建议
减少交换对于台式电脑来说并不是一个很好的解决方案,尽管许多网站会建议您在设置后首先执行此操作。
我建议将 swappiness 恢复为默认值 60 并启用 Zswap。它将压缩并将旧页面存储在内存中,而不是直接保存在交换中。您可以看到这个一步一步的指导。
我已经启用它,这是我的内存消耗(使用 android studio、android 模拟器、chrome、atom 运行)