当内存峰值时执行脚本?

当内存峰值时执行脚本?

我的内存不多,有时,当我玩电子游戏时,内存就会被占满,我的电脑开始冻结,我做的任何事情都要花 1 分钟以上的时间才能完成,包括移动鼠标和单击鼠标。

所以我想要的是能够终止我使用的某些进程,而且我知道我可以在内存已满之前终止它们(比如我的 Internet 浏览器),这样我就只剩下一点空间了。你知道怎么做吗?

从技术角度来说,我想要的是当内存几乎已满时,它会触发一个脚本,向我的互联网浏览器发送 SIGTERM(关闭命令),这样我的电脑就不会冻结,我可以选择保存我正在做的事情并重新打开我的浏览器或忘记我的浏览器。

感谢您的帮助。

答案1

好的,开始吧:

#!/bin/bash
threshold=100          # Minimum amount of memory left when you should start killing, in MB
browser="firefox-bin"  # Change this to whatever you use, firefox is actually firefox-bin
while true; do
    available=$(free -m | head -2 | tail -1 | awk '{print $4}')
    if [ "$threshold" -ge "$available" ]; then
        killall -q $browser  # Will not complain if no processes were killed
    fi
    sleep 20
done

将其放入/home/USERNAME/bin,执行chmod +x ~/bin/SCRIPTNAME,然后通过将其添加到您的自动启动程序中System->Preferences->Startup Applications

然后脚本将在您登录时自动运行。您可以使用以下命令手动运行它:~/bin/SCRIPTNAME &

答案2

为了保存记忆而杀死任何东西都是一个坏主意,尤其是自动地. 确保您有足够的交换空间和 RAM 可用 — 当然,在 512MB 的机器上运行占用 1GB 内存的程序就像驾驶卡罗拉汽车的同时试图赢得 F1 大奖赛一样。

我的意思是“不要这样做”。

答案3

内核自动执行此操作当内存不足时。

但是,如果你启用了交换功能,则需要很多研磨。

答案4

尝试按照此处的说明将 vm.swappiness 设置为 100(使用 100 而不是 0)在内存不足的机器上可以提高性能。 https://help.ubuntu.com/community/SwapFaq#What%20is%20swappiness%20and%20how%20do%20I%20change%20it

相关内容