如何在无响应的 Linux 系统中杀死最大的进程

当我在浏览器中打开很多选项卡时,我的系统会在几分钟内无响应。 我无法移动鼠标光标,或终止进程或 close 任何打开的标签。 当时,我只好强行重置系统。 当然,我用 一个标签大吊带 扩展,但它们也没有太大帮助。 我经常内存不足。 在寻找解决此问题的解决方案时,我遇到了 早期OOM. 对于那些想知道的人,当它绝对没有其他选择时,它将杀死一个无响应系统中最大的进程。 早期 OOM 每秒检查 10 次可用内存和空闲交换量。 如果两者都低于 10%,它将杀死最大的进程。

内容

  1. 为什么要早期OOM? 为什么不内置OOM杀手?
  2. 安装早期 OOM
  3. 使用早期 OOM 杀死无响应 Linux 系统中的最大进程
    1. 帮助我们帮助您:

为什么要早期OOM? 为什么不内置OOM杀手?

在深入之前,让我简单解释一下OOM杀手,也称为 出去 F 埃默里杀手。 OOM 杀手是内核在系统内存严重不足时使用的进程。 OOM 杀手的主要任务是继续杀死进程,直到释放足够的内存以供内核尝试运行的其余进程顺利运行。 OOM 杀手将选择对系统最不重要的最佳进程,并释放最大内存并杀死它们。 我们可以在中查看每个进程的oom_score /proc 目录下 PID 部分。

例子:

$ cat /proc/10299/oom_score 1

任何进程的 oom_score 值越高,在系统内存不足时被 OOM Killer 杀死的可能性就越高。

Early OOM 的开发者声称它比内核 OOM 杀手有一大优势。 如前所述,Linux oom 杀手会杀死得分最高的进程,因此 Chrome 浏览器将永远是 oom 杀手的第一个受害者。 为了避免这种情况,早期 OOM 使用 /proc/*/状态 代替 echo f > /proc/sysrq-触发器. 他还声称手动触发 oom 杀手可能在最新的 Linux 内核中根本不起作用。

安装早期 OOM

早期的 OOM 在 AUR 中可用,因此您可以使用 Arch Linux 及其衍生产品中的任何 AUR 帮助程序安装它。

使用

$ yay -S earlyoom

启用并启动 Early OOM 守护进程:

$ sudo systemctl enable earlyoom
$ sudo systemctl start earlyoom

在其他 Linux 发行版上,手动编译和安装它,如下所示。

$ git clone https://github.com/rfjakob/earlyoom.git $ cd earlyoom $ make $ sudo make install

使用早期 OOM 杀死无响应 Linux 系统中的最大进程

运行以下命令启动早期 OOM:

$ earlyoom

如果您是从源代码编译的,请运行以下命令来启动 Early OOM:

$ ./earlyoom

示例输出将是:

earlyoom 0.12 mem total: 3863 MiB, min: 386 MiB (10 %) swap total: 2047 MiB, min: 204 MiB (10 %) mem avail: 1770 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1773 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1772 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1773 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1772 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1773 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1771 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1773 MiB (45 %), swap free: 2047 MiB (99 %) mem avail: 1784 MiB (46 %), swap free: 2047 MiB (99 %) [...]

正如您在上面的输出中看到的,Early OOM 将显示您拥有多少内存和交换空间、最小值是多少、可用内存量以及空闲交换空间量。 请记住,它将一直运行,直到您按 CTRL+C 手动停止。

如果内存和交换都达到 10% 以下,Early OOM 会自动杀死最大的进程,直到系统有足够的内存才能平稳运行。 您还可以根据需要配置最小百分比值。

要将可用内存最小值设置为总数的 PERCENT,请运行:

$ earlyoom -m <PERCENT_HERE>

要将可用交换最小值设置为总数的 PERCENT,请运行:

$ earlyoom -s <PERCENT_HERE>

有关更多详细信息,请参阅帮助部分。

$ earlyoom -h earlyoom 0.12 Usage: earlyoom [OPTION]...   -m PERCENT set available memory minimum to PERCENT of total (default 10 %)  -s PERCENT set free swap minimum to PERCENT of total (default 10 %)  -M SIZE set available memory minimum to SIZE KiB  -S SIZE set free swap minimum to SIZE KiB  -k use kernel oom killer instead of own user-space implementation  -i user-space oom killer should ignore positive oom_score_adj values  -d enable debugging messages  -v print version information and exit  -r INTERVAL memory report interval in seconds (default 1), set to 0 to  disable completely  -p set niceness of earlyoom to -20 and oom_score_adj to -1000  -h this help text

现在,您无需担心最高内存消耗进程。

资源:

  • 早期 OOM GitHub 存储库
  • Unix 和 Linux 堆栈交换

感谢您的光临!

帮助我们帮助您:

  • 订阅我们的电子邮件通讯: 立即注册
  • 支持 OSTechNix: 通过贝宝捐款
  • 下载免费的电子书和视频: TradePub 上的 OSTechNix
  • 联系我们: 红迪网 | Facebook | 推特 | 领英 | RSS订阅

祝你有美好的一天!!

CLIearly OOMKill 进程LinuxOOM内存不足