跳转至内容

提升性能

来自 ArchWiki

本文档提供了关于与性能相关的基本系统诊断信息,以及可以采取的降低资源消耗或优化系统以达到实际或文档化性能改进的步骤。有关游戏和低延迟的额外建议,请参阅 Gaming#Improving performance

基础知识

了解你的系统

优化系统的最佳方法是找出瓶颈,即限制整体速度的子系统。系统规格可以帮助识别它们。

  • 如果在同时运行大型应用程序(如 LibreOffice 和 Firefox)时计算机变慢,请检查 RAM 是否足够。使用以下命令,并检查“可用”列
    $ free -h
  • 如果启动时间慢,并且应用程序在首次启动时(仅)加载时间长,那么很可能是硬盘出了问题。可以使用 hdparm 命令测量硬盘的速度
    # hdparm -t /dev/sdX
    注意 hdparm 仅指示硬盘的纯读取速度,并非有效基准。然而,在普通系统上,40MB/s 以上的值(空闲时)是可以接受的。
  • 如果即使有足够的 RAM,CPU 负载仍然持续很高,那么尝试通过禁用正在运行的 守护进程和/或进程来降低 CPU 使用率。可以通过多种方式监控这一点,例如使用 htoppstree 或任何其他 系统监视器工具
    $ htop
  • 如果使用直接渲染的应用程序(即使用 GPU 的应用程序,如视频播放器、游戏,甚至是 窗口管理器)速度缓慢,那么提高 GPU 性能将有所帮助。第一步是验证是否已启用直接渲染。这可以通过 glxinfo 命令指示,该命令是 mesa-utils 包的一部分,使用时应返回 direct rendering: Yes
    $ glxinfo | grep "direct rendering"
  • 在使用 桌面环境时,禁用(未使用的)视觉桌面效果可能会降低 GPU 使用率。如果当前环境不符合硬件和/或个人要求,请使用更轻量级的环境或创建 自定义环境
  • 使用优化的 内核可以提高性能。通常,linux-zen 是一个不错的选择。但是,可以按照本文档的某些部分所示,对默认内核进行调整以提高性能。

基准测试

优化效果通常难以判断。但是,可以通过 基准测试工具进行测量。

存储设备

扇区大小

检查您的 NVMe 驱动器和高级格式化硬盘驱动器是否使用了 最佳逻辑扇区大小

分区

确保您的分区 已正确对齐

多个驱动器

如果您有多个可用磁盘,您可以将它们设置为软件 RAID 以获得显著的速度提升。

在单独的磁盘上创建 交换空间也可以有很大帮助,特别是如果您的机器频繁进行交换。

将 SSD 作为 HDD 的缓存

如果无法避免使用硬盘驱动器,可以添加固态驱动器作为缓存层,以提高读取和/或写入速度,并减少随机访问的噪音。完成此目的的选项包括 LVM#CacheBcacheBcachefs#SSD caching

HDD 上的布局

如果使用传统的旋转式 HDD,您的分区布局会影响系统的性能。驱动器开头的扇区(更靠近磁盘外部)比末尾的扇区更快。此外,较小的分区需要较少的驱动器磁头移动,从而加快磁盘操作。因此,建议创建一个仅用于系统的较小分区(15-20GiB,根据您的需求或多或少),尽可能靠近驱动器的开头。其他数据(图片、视频)应保存在单独的分区上,这通常通过将主目录(/home)与系统(/)分开来实现。

注意 与本页上的所有建议一样,请衡量所提供的益处:除非 短行程(short stroking)硬盘并仅使用其总容量的百分之几,否则在一般使用中,分离分区只会提高访问时间百分之几,因为读/写操作仍然会分布在整个驱动器上。相比之下,升级到 SSD 会将性能提高一个数量级以上。

选择和调整文件系统

为特定系统选择最佳文件系统非常重要,因为每个文件系统都有其优点。 文件系统文章提供了最流行文件系统的简短摘要。您也可以在 Category:File systems 中找到相关文章。

挂载选项

各种 *atime 选项可以减轻 strictatime 的性能损失。

其他挂载选项特定于文件系统,因此请参阅相关文件系统的文章。

调整内核参数

有几个关键的可调参数会影响块设备性能,有关更多信息,请参阅 sysctl#Virtual memory

输入/输出调度器

背景信息

输入/输出(I/O)调度器是内核组件,它决定以何种顺序将块 I/O 操作提交给存储设备。在此提醒两种主要驱动器类型的一些规格很有用,因为 I/O 调度器的目标是优化它们处理读取请求的方式。

  • HDD 有旋转的磁盘和一个物理上移动到所需位置的磁头。因此,随机延迟相当高,在 3 到 12 毫秒之间(无论是高端服务器驱动器还是笔记本电脑驱动器,并且绕过了磁盘控制器写缓存),而顺序访问提供更高的吞吐量。典型的 HDD 吞吐量约为每秒 200 个 I/O 操作(IOPS)。
  • SSD 没有移动部件,随机访问与顺序访问一样快,通常低于 0.1 毫秒,并且它可以处理多个并发请求。典型的 SSD 吞吐量大于 10,000 IOPS,这在常见工作负载情况下已绰绰有余。

如果有许多进程向不同的存储部分发出 I/O 请求,可能会生成数千个 IOPS,而典型的 HDD 只能处理约 200 IOPS。存在一个请求队列,这些请求必须等待访问存储。这就是 I/O 调度器发挥优化作用的地方。

调度算法

提高吞吐量的一种方法是线性化访问:通过按逻辑地址排序等待的请求并分组最近的请求。历史上,这是第一个 Linux I/O 调度器,称为 电梯

电梯算法的一个问题是它不适合执行顺序访问的进程:读取一块数据,处理几微秒,然后读取下一块数据,依此类推。电梯调度器不知道进程即将读取附近的另一块数据,因此会转而处理另一个进程在其他位置的请求。前瞻性 I/O 调度器解决了这个问题:它在处理另一个请求之前暂停几毫秒,以预期另一个附近的读取操作。

虽然这些调度器试图提高总吞吐量,但它们可能会让一些不幸的请求等待很长时间。例如,想象一下大多数进程在存储空间的开头发出请求,而一个不幸的进程在存储的另一端发出请求。这种可能无限期地推迟进程称为饥饿。为了提高公平性,开发了 截止日期算法。它有一个按地址排序的队列,类似于电梯,但如果某个请求在这个队列中停留时间过长,它就会移动到一个按过期时间排序的“已过期”队列。调度器首先检查过期队列,然后从那里处理请求,之后才移动到电梯队列。请注意,这种公平性会对整体吞吐量产生负面影响。

完全公平排队 (CFQ) 以不同的方式处理问题,它根据提交请求的进程的优先级来分配时间片和每个队列允许的请求数。它支持 cgroup,允许为特定进程集合保留一定量的 I/O。这对于共享和云托管尤其有用:为某些 IOPS 付费的用户希望在需要时获得他们的份额。此外,它在同步 I/O 结束时空闲等待其他附近的 I/O 操作,继承了前瞻性调度器的这个特性并带来了改进。前瞻性电梯调度器都已被 Linux 内核淘汰,取而代之的是下面介绍的更高级的替代方案。

预算公平排队 (BFQ) 基于 CFQ 代码并带来了一些改进。它不会为每个进程分配固定的时间片来授予磁盘,而是为进程分配以扇区数为单位的“预算”并使用启发式方法。它是一种相对复杂的调度器,可能更适合旋转驱动器和慢速 SSD,因为其较高的每个操作开销,特别是如果与慢速 CPU 相关联,可能会降低快速设备的性能。BFQ 在个人系统上的目标是,对于交互式任务,存储设备的响应速度几乎就像空闲一样。在其默认配置中,它侧重于提供最低延迟而不是实现最大吞吐量,这有时会大大 加速硬盘上应用程序的启动

Kyber 是一个受网络路由中使用的活动队列管理技术启发的最新调度器。该实现基于“令牌”,作为限制请求的机制。需要一个队列令牌来分配请求,这用于防止请求饥饿。还需要一个调度令牌,它限制特定优先级在给定设备上的操作。最后,定义了一个目标读取延迟,调度器会自行调整以达到此延迟目标。该算法的实现相对简单,被认为对快速设备有效。

内核的 I/O 调度器

虽然早期的一些算法已被淘汰,但官方 Linux 内核支持多种 I/O 调度器。多队列块 I/O 排队机制 (blk-mq) 将 I/O 查询映射到多个队列,任务分布在线程和 CPU 核心之间。在此框架下,可以使用以下调度器:

  • None,不应用任何排队算法。
  • mq-deadline,截止日期调度器(见下文)的多线程适配。
  • Kyber
  • BFQ

更改 I/O 调度器

注意 调度器的最佳选择取决于设备和工作负载的性质。此外,吞吐量(MB/s)不是性能的唯一衡量标准:截止日期或公平性会降低整体吞吐量,但可能会提高系统响应能力。 基准测试可能有助于指示每个 I/O 调度器的性能。

要列出设备可用的调度器以及当前活动的调度器(括号中)

$ cat /sys/block/sda/queue/scheduler
mq-deadline kyber [bfq] none

要列出所有设备可用的调度器

$ grep "" /sys/block/*/queue/scheduler
/sys/block/pktcdvd0/queue/scheduler:none
/sys/block/sda/queue/scheduler:mq-deadline kyber [bfq] none
/sys/block/sr0/queue/scheduler:[mq-deadline] kyber bfq none

要将设备 sda 的活动 I/O 调度器更改为 bfq,请使用

# echo bfq > /sys/block/sda/queue/scheduler

更改 I/O 调度器的过程,根据磁盘是旋转的还是非旋转的,可以实现自动化并跨越重启。例如,下面的 udev 规则将调度器设置为旋转驱动器的 bfqSSD/eMMC 驱动器的 bfq 以及 NVMe 驱动器的 none

/etc/udev/rules.d/60-ioschedulers.rules
# HDD
ACTION=="add|change", KERNEL=="sd[a-z]*", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

# SSD
ACTION=="add|change", KERNEL=="sd[a-z]*|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="bfq"

# NVMe SSD
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"

重启或强制 udev#加载新规则

调整 I/O 调度器

内核的每个 I/O 调度器都有其自己的可调参数,例如延迟时间、过期时间或 FIFO 参数。它们有助于将算法调整到特定的设备和工作负载组合。这通常是为了在给定的利用率下实现更高的吞吐量或更低的延迟。可调参数及其描述可以在 内核文档中找到。

要列出设备(以下示例中为 sdb,它正在使用 deadline)可用的可调参数,请使用

$ ls /sys/block/sdb/queue/iosched
fifo_batch  front_merges  read_expire  write_expire  writes_starved

要以牺牲延迟为代价来提高 deadline 的吞吐量,可以使用以下命令增加 fifo_batch

# echo 32 > /sys/block/sdb/queue/iosched/fifo_batch

电源管理配置和写缓存

处理传统的旋转磁盘(HDD)时,您可能希望完全禁用或降低节能功能,并检查写缓存是否已启用。

请参阅 Hdparm#电源管理配置Hdparm#写缓存

之后,您可以创建一个 udev 规则以在启动时应用它们。

提示 GNOME 允许通过“磁盘”应用程序设置其中一些参数,而无需 udev 规则。
注意 某些功能可能不支持您的硬盘。如果发生这种情况,Hdparm 将通知您。因此,只需忽略此特定功能的配置。

减少磁盘读写

避免不必要的访问慢速存储驱动器有利于性能,也有助于延长设备寿命,尽管在现代硬件上,寿命的差异通常可以忽略不计。

注意 一个具有一般 10 倍写放大系数、标准 10000 次写/擦除周期和每天写入 10GB 数据的 32GB SSD,其**寿命预期为 8 年**。使用 更大的 SSD 和具有较低写放大系数的现代控制器可以改善这一点。在考虑限制磁盘写入的任何特定策略是否真的有必要时,请参阅 此寿命实验

显示磁盘写入

iotop 包可以按磁盘写入排序,并显示程序写入磁盘的数量和频率。有关详细信息,请参阅 iotop(8)

将文件移至 tmpfs

将文件(例如浏览器配置文件)移至 tmpfs 文件系统,以提高应用程序响应速度,因为所有文件现在都存储在 RAM 中。

文件系统

如果性能有所提高,请参阅相应的 文件系统页面,请参阅 #选择和调整文件系统处的列表。

交换空间

有关详细信息,请参阅 Swap#性能

回写间隔和缓冲区大小

有关详细信息,请参阅 Sysctl#虚拟内存

禁用核心转储

请参阅 Core dump#禁用自动核心转储

使用 ionice 进行存储 I/O 调度

许多任务,如备份,不依赖于短存储 I/O 延迟或高存储 I/O 带宽来完成任务,它们可以归类为后台任务。另一方面,快速 I/O 对于良好的桌面 UI 响应能力是必要的。因此,在其他任务需要存储 I/O 时,减少分配给后台任务的存储带宽量是有益的。这可以通过利用 Linux I/O 调度器 BFQ 来实现,该调度器允许为进程设置不同的优先级。

可以通过启动后台进程来将其 I/O 优先级降低到“空闲”级别

$ ionice -c 3 command

有关更多信息,请参阅 ionice 的简要介绍ionice(1)

Trimming

为了获得最佳性能,应定期丢弃(也称为 TRIM)固态驱动器的空闲块,以优化随机写入速度。有关更多信息,请参阅 Solid state drive#TRIM

网络

通用信息

区域代码

本条目或章节可合并至 Network configuration/Wireless#尊重区域代码

注意:我们已在目标页面有一个很好的章节,将大部分内容移至那里并仅保留此处的存根,重点是内核参数,以便在设置不正确时覆盖设置。(在 Talk:Improving performance 中讨论)

不同国家/地区对无线网络服务有不同的标准,通过设置正确的区域代码进行网络配置,通常可以获得更强的信号。这通常在设置过程中配置,但在某些情况下 设置不会被正确应用。检查 /sys/module/cfg80211/parameters/ieee80211_regdom 的内容;如果值为 00(通常更具限制性的全局设置)或设置为错误的区域,请尝试添加以下 内核参数,将 XX 替换为正确的国家代码(例如,美国为 US

cfg80211.ieee80211_regdom=XX

然后重启您的系统。

电源 management

某些设备存在问题,导致其网络适配器在使用中时错误地进入省电模式,从而降低性能或导致断开连接。如果您遇到这种情况,请确保您已 升级您的软件包到最新版本以获取任何必要的固件更新,并参阅 Power management#网络接口

CPU

超频

超频通过提高 CPU 的峰值时钟频率来提高计算性能。超频的能力取决于 CPU 型号和主板型号的组合。通常通过 BIOS 完成。超频也有缺点和风险。本文档既不推荐也不反对。

许多 Intel 芯片无法正确向 acpi_cpufreq 和大多数其他实用程序报告其时钟频率。这会导致 dmesg 中出现过多消息,可以通过卸载并阻止内核模块 acpi_cpufreq 来避免。要读取其时钟速度,请使用来自 i7zAUR 包的 i7z。要检查超频 CPU 的正确运行,建议进行 压力测试

频率缩放

请参阅 CPU 频率缩放

CPU 调度器

主线 Linux 内核中的默认 CPU 调度器是 EEVDF

本文章或章节需要扩充。

原因:将 CFS(之前的默认调度器)添加到列表中。(在 Talk:Improving performance 中讨论)
  • Project C — Cross-project for refactoring BMQ into Project C, with re-creation of PDS based on the Project C code base. So it is a merge of the two projects, with a subsequent update of the PDS as Project C. Recommended as a more recent development.
https://cchalpha.blogspot.com/ || linux-prjcAUR
  • BORE — BORE 调度器专注于牺牲部分公平性以降低交互式任务的调度延迟,它构建在 CFS 之上,并且仅针对 vruntime 代码更新进行调整,因此与其他的非官方 CPU 调度器相比,总体变化相当小。
https://github.com/firelzrd/bore-scheduler || linux-cachyos-boreAUR
  • SCX — 允许动态注入各种 CPU 调度器,而无需系统重置。
https://github.com/sched-ext/scx || scx-scheds

实时内核

某些应用程序,例如以全高清分辨率(1080p)运行电视调谐卡,可能会受益于使用 实时内核

调整进程优先级

另请参阅 nice(1)renice(1)

Ananicy

Ananicy CPP 是一个守护进程,可以通过 ananicy-cppananicy-cpp-gitAUR 获取,用于自动调整可执行文件的 nice 值。nice 值表示可执行文件在分配 CPU 资源时的优先级。

警告 GameModeAnanicy CPP 都会调整进程的 nice 值。但是,不建议同时使用这两个工具。[1]

cgroups

请参阅 cgroups

LimitCPU

LimitCPU 是一个限制特定进程 CPU 使用百分比的程序。安装 limitcpuAUR 后,您可以使用 0 到 100 的比例乘以计算机的 CPU 核心数来限制进程 PID 的 CPU 使用率。例如,如果有八个 CPU 核心,则百分比范围将是 0 到 800。用法

$ limitcpu -l 50 -p 5081

irqbalance

irqbalance 的目的是在多处理器系统上将硬件中断分配到各个处理器,以提高性能。它可以通过提供的 irqbalance.service 进行控制

警告 在某些情况下,irqbalance 会干扰节能,并可能导致视频游戏卡顿或帧率下降 [2]

关闭 CPU 漏洞缓解措施

警告 请勿在未考虑其暴露的漏洞的情况下应用此设置。除其他外,如果启用此选项,您不得依赖虚拟机来隔离不受信任的程序。有关更多信息,请参阅

关闭 CPU 漏洞缓解措施可能会提高性能。使用下面的 内核参数来禁用它们所有

mitigations=off

所有开关的解释都在 kernel.org 上提供。您可以使用 spectre-meltdown-checkerAURlscpu(1)(来自 util-linux)进行漏洞检查。

注意 当使用第 10 代及更高版本的 Intel CPU 或 AMD Ryzen 1000 系列及更高版本时,禁用缓解措施带来的性能提升仅为 5%,而对于之前的 CPU 代系,则可高达 25%。请参阅2021 年初的总体评测Rocket Lake 测试Alder Lake 测试

针对 CPU 进行编译优化

根据您的 CPU,您可以通过使用 -march=native 标志进行编译,以针对您的原生 CPU 微架构进行软件编译,从而获得少量性能提升。但是,使用此标志编译的任何二进制文件在其他 CPU 微架构上都会变慢或损坏。如果您使用此选项并想更换或升级 CPU,则需要重新编译二进制文件,或者选择一个与旧 CPU 具有相同微架构的新 CPU。您可以通过此选项为 makepkg 设置默认值

如果您编译自己的内核,您也可以在内核编译期间使用 CONFIG_X86_NATIVE_CPU 选项启用此选项。然而,内核的改进会比较小,因为内核禁止在通用代码中使用扩展向量指令,而这些指令是普通二进制文件性能提升的主要原因。因此,大部分性能提升将来自于小得多的微优化

图形

Xorg配置

图形性能可能取决于 xorg.conf(5) 中的设置;请参阅 NVIDIAAMDGPUIntel 条目。不正确的设置可能会导致 Xorg 无法工作,因此请谨慎操作。

Mesa 配置

Mesa 驱动程序的性能可以通过 drirc 进行配置。 adriconf(高级 DRI 配置器)是一个图形化工具,通过设置选项并将其写入标准的 drirc 文件来配置 Mesa 驱动程序。

硬件视频加速

硬件视频加速使得显卡能够解码/编码视频。

超频

与 CPU 类似,超频可以直接提高性能,但通常不推荐。有几个软件包,例如 rovclockAUR(ATI 显卡)、rocm-smi-lib(新款 AMD 显卡)、nvclockAUR(老款 NVIDIA - 最高 GeForce 9),以及 nvidia-utils(新款 NVIDIA 显卡)。

请参阅 AMDGPU#OverclockingNVIDIA/Tips and tricks#Enabling overclocking in nvidia-settings

启用 PCIe 可调整大小 BAR

  • 在某些系统上启用 PCIe 可调整大小 BAR 可能会导致性能大幅下降。请基准测试您的系统以确保其提高了性能。请注意,在较新的 Intel Arc 独立 GPU 上,Resizable BAR 官方推荐由 Intel 提供,几乎总是会提高性能。
  • 必须禁用兼容性支持模块 (CSM) 才能生效。

PCI 规范允许使用更大的基址寄存器 (BAR) 来将 PCI 设备内存暴露给 PCI 控制器。这可以提高显卡的性能。访问完整的显存可以提高性能,同时也能启用图形驱动程序中的优化。Resizable BAR、4G 以上解码和这些驱动程序优化相结合,AMD 称之为AMD Smart Access Memory,最初在 AMD 500 系列芯片组主板上可用,后来通过 UEFI 更新扩展到 AMD 400 系列和 Intel 300 系列及更高版本。此设置可能并非在所有主板上都可用,并且已知有时会在某些主板上导致启动问题。

如果 BAR 的大小为 256MB,则该功能未启用或不支持

# dmesg | grep BAR=
[drm] Detected VRAM RAM=8176M, BAR=256M

要启用它,请在主板设置中启用名为“Above 4G Decode”或“>4GB MMIO”的选项。验证 BAR 是否现在更大

# dmesg | grep BAR=
[drm] Detected VRAM RAM=8176M, BAR=8192M

RAM、交换和 OOM 处理

时钟频率和时序

RAM 可以以不同的时钟频率和时序运行,这些可以在 BIOS 中配置。内存性能取决于这两个值。选择 BIOS 提供的最高预设值通常比默认设置能提高性能。请注意,将频率提高到主板和 RAM 供应商都不支持的值是超频,并且存在类似的风险和缺点,请参阅#Overclocking

RAM 上的根目录覆盖

本文或本章节已过时。

原因: liveroot 脚本似乎已不再维护,但这种方法仍然应该有效。(在Talk:Improving performance#Section_5.2: liveroot hasn't been updated since 2016 中讨论)

如果从写入速度慢的介质(USB、旋转硬盘)运行,并且存储需求较低,则根目录可以在只读根目录(在磁盘上)之上运行在 RAM 覆盖上。这可以极大地提高性能,但代价是根目录的可写空间有限。请参阅liverootAUR

zram 或 zswap 上的交换

使用 zswapzram 上的交换可以获得类似的优势(付出类似的代价)。这两个在目标上大体相似,但操作上并非如此。

  • zswap 作为压缩 RAM 缓存运行,既不需要(也不允许)广泛的用户空间配置。它与交换设备协同工作,充当其缓存。通常进入交换的页面可以改由 zswap 处理。
  • zram 是一个内核模块,可用于在 RAM 中创建压缩块设备。此压缩块设备可用作交换设备,无需其他交换设备进行备份。它带有许多选项,包括使用备份设备保存冷页面(cold pages)的可能性。

由于这两个选项都涉及交换子系统,影响交换的配置也会影响这些系统。例如,swappiness 决定了在内存压力大的情况下,内核应该优先丢弃文件缓存还是将页面移到交换空间。由于 zswap 会拦截将页面移到交换空间的动作,而 zram 则充当交换空间,因此该选项也会决定这两个机制的使用频率。

使用显卡的 RAM

在极少数情况下,如果您的 RAM 非常少但显存充裕,可以将后者用作交换空间。请参阅Swap on video RAM

在内存不足的情况下提高系统响应能力

本文章或章节需要扩充。

原因: 应提及 systemd.service(5) 看门狗设置并交叉引用,另请参阅Systemd#Notifying about failed services)。(在Talk:Improving performance 中讨论)

在传统的 GNU/Linux 系统中,特别是对于图形工作站,当分配的内存被过度承诺时,整体系统的响应能力可能会下降到几乎无法使用的状态,然后才会触发内核中的内存不足 (OOM) 杀手,或者释放足够的内存(当系统无响应时,这不太可能很快发生,因为您几乎无法关闭任何可能继续分配更多内存的内存密集型应用程序)。行为也取决于特定的设置和条件,恢复到正常响应状态可能需要几秒钟到半小时以上,在诸如会议演示等严重情况下,等待可能会很痛苦。

虽然内核行为以及内存不足情况下的用户空间行为在未来可能会有所改进(正如在kernelFedora 邮件列表中讨论的那样),但用户可以使用比硬重启系统或调整 vm.overcommit_* sysctl 参数更可行、更有效的选项。

  • 使用Magic SysRq key,即 Alt+SysRq+f,手动触发内核 OOM 杀手。
  • 使用用户空间的 OOM 守护进程来自动(或交互式地)处理这些问题。
警告 触发 OOM 杀手终止正在运行的应用程序可能会丢失您未保存的工作。是耐心等待应用程序最终正常释放内存,还是希望尽快恢复无响应的系统,由您决定。

有时用户可能更喜欢 OOM 守护进程而不是 SysRq,因为使用内核 OOM 杀手,您无法优先选择要(或不)终止的进程。以下是一些 OOM 守护进程:

  • systemd-oomd — 由 systemd 提供,作为 systemd-oomd.service 运行,它使用 cgroups-v2 和压力停顿信息 (PSI) 来监视进程并在内核空间出现 OOM 之前采取行动。
https://github.com/systemd/systemd, systemd-oomd(8) || systemd
  • earlyoom — 用 C 编写的简单的用户空间 OOM 杀手实现。
https://github.com/rfjakob/earlyoom || earlyoom
  • oomd — 基于 PSI 的 OOM 杀手实现,需要 Linux 内核版本 4.20+。配置使用 JSON 格式,相当复杂。已确认在 Facebook 的生产环境中工作。
https://github.com/facebookincubator/oomd || oomdAUR
  • nohang — 用 Python 编写的复杂 OOM 处理程序,支持可选的 PSI,比 earlyoom 更可配置。
https://github.com/hakavlad/nohang || nohang-gitAUR
  • low-memory-monitor — GNOME 开发人员的努力,旨在提供更好的用户空间应用程序通信,以指示低内存状态,此外还可以配置为触发内核 OOM 杀手。基于 PSI,需要 Linux 5.2+。
https://gitlab.freedesktop.org/hadess/low-memory-monitor/ || low-memory-monitor-gitAUR
  • uresourced — 一个小型守护进程,为活动的图形用户会话启用基于 cgroup 的资源保护。
https://gitlab.freedesktop.org/benzea/uresourced || uresourcedAUR
  • bustd — 非常轻量级的用户空间 OOM 杀手,适用于较慢的机器。基于 PSI,需要 Linux 4.2+。
https://github.com/vrmiguel/bustd || bustdAUR

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.