我正在使用 Ubuntu 20.04,如果我没有记错的话,Ubuntu 有一个内置功能,如果一个进程突然使用了所有的 RAM 来阻止系统崩溃,它会终止该进程,我已经看到过这种情况发生(例如,它会终止任何突然使用所有系统内存或其他东西的 python 脚本,并在终端中显示已终止)
问题是很多时候这种机制不起作用,并导致我的系统崩溃(它是一个使用所有内存的 python 脚本),我正在做机器学习的东西,我无法预测我的一些脚本可能会使用多少,我期望 Ubuntu 在突然使用所有系统内存时基本上会杀死一个应用程序,但它不起作用,我的系统崩溃了(一切都挂了,没有鼠标移动或任何东西,但使用 REISUB 我可以重新启动系统)
有时甚至不会突然增加 RAM 使用量,脚本只是不断分配更多的 RAM 和 RAM,当达到限制时,我的系统基本上会冻结,而 Ubuntu 不会停止它!!我以为这种情况有一种防御机制?
所以我的问题是:
我怎样才能告诉 Ubuntu 终止任何突然使用所有可用 RAM 的应用程序?基本上,除了更改脚本之外,对我来说最好的解决方案是什么来阻止崩溃?
编辑:有没有办法告诉操作系统在内存不足的情况下终止 python 进程,无论进程 id 是什么?意思是当内存不足时,终止任何名为 python 的进程。
编辑2:
free -h 的输出:
total used free shared buff/cache available
Mem: 15Gi 4.1Gi 218Mi 469Mi 11Gi 10Gi
Swap: 2.0Gi 946Mi 1.1Gi
编辑3:
sysctl vm.swappiness 的输出
vm.swappiness = 60
答案1
让我们将您的 /swapfile 从 2G 增加到 4G(如果您的 python 脚本需要的话,以后可能会更多)...
笔记:命令使用不当dd
可能导致数据丢失。建议复制/粘贴。
在里面terminal
...
sudo swapoff -a # turn off swap
sudo rm -i /swapfile # remove old /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
sudo chmod 600 /swapfile # set proper file protections
sudo mkswap /swapfile # init /swapfile
sudo swapon /swapfile # turn on swap
free -h # confirm 16G RAM and 4G swap
确认 /etc/fstab 末尾的 /swapfile 行...并确认没有其他“swap”行...
要编辑,使用sudo -H gedit /etc/fstab
或sudo pico /etc/fstab
/swapfile none swap sw 0 0
reboot # reboot and verify operation
答案2
禁用交换文件并将其删除
sudo swapoff /swapfile
sudo rm /swapfile
创建所需大小的新交换文件。
sudo fallocate -l 4G /swapfile
在这个命令中,将4G调整为你想要的大小。