优化 systemd 的启动速度
一、使用 systemd-analyze 工具分析启动时间
systemd-analyze
是一个强大的工具,用于分析系统启动过程中的时间消耗,帮助您定位启动瓶颈。
1、查看整体启动时间:
systemd-analyze
该命令会显示系统启动过程中不同阶段的时间消耗。
- Startup finished in 1.112s (kernel): 这表示从启动过程开始到内核完成初始化并准备加载 initrd(初始化内存磁盘)为止所花费的时间。内核是操作系统的核心部分,负责管理硬件资源和执行其他系统任务。
- 1.412s (initrd): 这表示加载 initrd 所花费的时间。initrd 是一个临时的根文件系统,它包含了一些必要的驱动程序和文件,用于帮助内核在启动过程中初始化硬件和挂载实际的根文件系统。
- 15.967s (userspace): 这表示从 initrd 完成加载到用户空间完全启动并准备接受用户输入为止所花费的时间。用户空间包括所有非内核的进程和服务,如登录管理器、桌面环境等。
- = 18.491s: 这是整个启动过程的总时间,即从启动开始到用户空间完全启动所花费的总时间。
2、查看耗时最长的服务
systemd-analyze blame
该命令会列出启动过程中耗时最长的服务,方便您找到需要优化的服务。
3、查看启动时间的关键链:
systemd-analyze critical-chain
该命令会显示启动过程中的关键路径,帮助您了解哪些服务的启动延迟影响了整体启动速度。
4、生成启动过程的 SVG 图像:
systemd-analyze plot > startup.svg
该命令生成一个 SVG 图像,直观展示每个服务的启动时刻。
二、禁用不必要的启动项
减少启动时加载的服务数量可以显著提高启动速度。
1、列出所有服务:
systemctl list-unit-files --type=service
该命令会列出所有服务及其状态
static
状态通常意味着该服务在当前启动过程中没有运行,但它可能在未来某个时刻被启动。
disabled
状态意味着该服务在系统启动时不会被自动启动。
enabled
状态意味着该服务在系统启动时会自动启动。
2、禁用不需要的服务:
systemctl disable <service_name>.service
三、优化服务单元文件
通过调整服务单元文件的配置,可以优化服务的启动顺序和依赖关系。
1、调整服务的启动顺序:
在服务单元文件中,合理配置 After
和 Requires
指令,确保关键服务优先启动。例如:
[Unit]
After=network.target
Requires=network.target
2、并行启动服务:
将可以并行处理的服务设置为 Type=simple
,以便它们立即启动,而不等待其他服务。例如:
[Service]
Type=simple
3、延迟启动非关键服务:
对于一些不需要在启动时立即运行的服务,可以将其设置为延迟启动:
[Service]
StartLimitIntervalSec=30
StartLimitBurst=5
服务在 30 秒内最多可以尝试启动 5 次。如果服务在这 30 秒内尝试启动的次数超过了 5 次,系统将不会再次尝试启动该服务,直到 30 秒的时间间隔过去。
四、调整启动顺序
通过 BIOS 或 UEFI 设置调整系统启动顺序,确保关键服务优先启动。此外,还可以优化 GRUB 配置:
1、减少 GRUB 菜单显示时间:
编辑 /etc/default/grub
文件,将 GRUB_TIMEOUT
设置为 2 秒:
GRUB_TIMEOUT=2
然后,运行以下命令使更改生效:
update-grub
2、优化内核参数:
在 /etc/default/grub
中添加 elevator=noop
,优化磁盘 I/O 性能:
GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop"
elevator=noop
表示在启动时,Linux 内核将使用 “noop”(无操作)I/O 调度算法。I/O 调度算法用于管理磁盘 I/O 请求的顺序和优先级,以优化磁盘性能。
五、更新系统和驱动程序
确保系统和驱动程序是最新版本,可以修复一些启动速度较慢的问题:
# Debian/Ubuntu
apt update && apt upgrade -y
# RHEL/CentOS
yum update && yum upgrade -y