我有 Ubuntu 21.04,前段时间开始遇到一个特殊问题。我经常运行 Python 程序,有时重复运行相同的程序而没有任何区别。但一段时间以来,我的电脑有时会死机。
我刚刚运行了一些内存密集型 Python 脚本,同时打开了系统监视器屏幕。我注意到,已用 RAM 和交换内存比例会稳步增加。在使用的 RAM 达到约 95%(交换为 100%)后,我终止了该进程。但两个内存仍然满了!
我不明白,系统不是应该在进程完成后释放内存吗?这是一个错误吗?我该如何释放它?
$ free -h
total used free shared buff/cache available
Mem: 7,2Gi 6,5Gi 281Mi 20Mi 362Mi 378Mi
Swap: 2,0Gi 2,0Gi 1,0Mi
$ ps -ao comm,%mem | sort -rnk2,2 | head
python 72.4
gedit 0.6
Xorg 0.4
sort 0.0
python 0.0
python 0.0
ps 0.0
head 0.0
gnome-session-b 0.0
COMMAND %MEM
答案1
一个可能的解决方法是向您的系统添加更多交换:
$ free -h
total used free shared buff/cache available
Mem: 7,2Gi 6,5Gi 281Mi 20Mi 362Mi 378Mi
Swap: 2,0Gi 2,0Gi 1,0Mi
2G 的交换空间不够。我们将其增加到 4G。
首先,检查一下...
确认sysctl vm.swappiness
= 60。
如果其中一个/两个swapon -s
或grep -i swap /etc/fstab
显示“/swapfile”,则执行以下操作:
在里面terminal
...
sudo swapoff -a # turn off swap
## create the new /swapfile; this will overwrite any existing file
head -c 4G /dev/zero | sudo tee /swapfile
sudo chmod 600 /swapfile # set proper file protections
sudo mkswap /swapfile # init /swapfile
sudo swapon /swapfile # turn on swap
free -h # confirm 8G RAM and 4G swap
编辑/etc/fstab
,使用sudo -H gedit /etc/fstab
或sudo pico /etc/fstab
。
添加此/swapfile
行/etc/fstab
并确认没有其他“交换”行存在:
/swapfile none swap sw 0 0
最后,重新启动并验证操作。