百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux 启动时间优化

haoteby 2025-05-21 13:47 41 浏览

启动 Linux 系统时,您可能会看到执行某些更新或安装新应用程序时出现延迟。为了帮助加快 Linux 启动时间,您需要确定时间延迟最多的地方。

延迟可能发生在四个基本位置。这些不同的领域是:
Firmware

Loader

Kernel

Userspace

让我们先看看这些,看看在这些阶段发生了什么。

Firmware

固件是由硬件加载的“软件”。例如,当您的视频卡通电时,它具有内置代码,可以让 Linux 操作系统 (OS) 访问它。以这种方式,操作系统可以控制视频卡的各个方面。另一个例子是主板固件,它可以让操作系统控制处理器风扇。

每台 PC、笔记本电脑、服务器等都有固件。大多数情况下可以通过系统更新来更新固件。大多数系统更新不是自动的,必须从系统制造商处下载。例如,如果您有 AMD Radeon 视频卡,那么您可以访问 AMD 网站并可能找到您的视频卡的更新。

笔记:甚至打印机和其他外部设备也可以有固件。这些设备不应该对启动时间有任何影响。只有内部设备或参与系统启动的设备才是重要的。如果您使用外部硬盘驱动器启动操作系统,那么磁盘驱动器上的固件将很重要。

Loader

程序加载固件后,引导加载程序将接管引导过程。引导加载程序将加载 Linux 内核和 Linux RAM 磁盘 (initrd)。

一种流行的引导加载程序是 GRand Unified Bootloader (GRUB)。引导加载程序通常会有延迟。当超时发生时,它允许用户在选择默认选项之前从菜单中选择一个选项。

Kernel

Linux Kernel是通过软件与硬件交互的软件。系统上的任何应用程序都会向内核发送命令。内核将使用这些命令与硬件进行通信。它还允许硬件与软件交互。

一个例子是在键盘上按下一个键。硬件将信息发送到内核,内核将信号发送到软件,指出按下了一个键。鼠标点击也是如此。当在桌面上选择一个图标时,一个信号被发送到内核,内核与软件交互以确定发生了什么。然后将信息发送到内核。内核向硬盘发送信号以读取程序。
程序被读入内存并执行。因此,如果您双击 Web 浏览器图标,程序就会加载到内存中并启动。

许多事情都由内核在后台控制,例如服务、系统更新、硬件控制等。

Userspace

固件、引导加载程序和内核中未包含的任何其他软件都是用户空间。这些程序包括系统上所有可以执行的应用程序、驱动程序和其他文件。

用户空间有时被称为“userland”。在大多数情况下,引导过程的这一部分将是引导时间的最大部分。

确定启动时间

确定这四个部分的启动时间的最快方法是在终端中发出以下命令:

systemd-analyze

应显示类似于图 1 的输出。

图 1

固件耗时 8.76 秒,加载程序耗时 5.974 秒,内核耗时 6.148 秒,用户空间耗时 1 分 33.466 秒。大部分加载时间都在用户空间。

如果您的固件加载时间异常长,那么您可以在 BIOS 中进行更改。禁用不需要的功能可以帮助缩短固件启动时间。

加载程序的问题可能需要重置引导加载程序中的选项。检查不需要的任何选项。

内核加载时间不是问题,除非您编译内核以获得额外的功能。您可能需要查看您添加的不需要的内容。您也可以尝试使用库存内核,看看它是否加载得更快。

您可能还会注意到图形用户界面 (GUI) 在用户空间加载后的 1 分 10.144 秒内启动。

用户空间通常是引导时间的最大部分。用户空间上的各个时间可以从终端使用以下命令确定:

systemd-analyze blame

输出是用户空间中加载的所有项目的列表,从加载时间最长的到最短的最后排序。图 2 显示了一个示例。



图 2

查看图 02,您可以忽略第一行。第一行是在登录之前在后台执行的系统更新。您可以查看列表并查看系统上加载的所有内容。如果您执行此列表并看到您不需要的东西,那么您可以卸载该程序或禁用该服务。

更改任何内容后,您可以重新启动系统并再次检查命令以查看启动时间如何更改。该过程是优化启动时间以及在删除应用程序和禁用服务时降低内存使用量的好方法。

删除应用程序

有一种方法可以比 systemd-analyze 命令的列表更容易找到应用程序。假设在图 02 中的输出中,有一行来自名为 XY1 的程序,加载时间超过一分钟。如果我不再需要该应用程序,那么我可能想要删除该程序。在终端中,我可以输入“sudo apt purge XY1”,但没有任何反应,因为找不到该程序。

要找到应用程序,我可以运行命令 'dpkg -l | grep -i XY1'。找到的程序列表应包括程序名称。我可以使用该名称通过替换“sudo apt purge”命令中的名称来清除它。命令完成后,您可以运行“sudo apt autoremove”来完成卸载任何不需要的东西。

停止服务

输出中列出的一些项目是服务。这些由结尾的“.service”表示。

仅仅因为此处列出的服务并不意味着它在启动后仍然处于活动状态。例如,让我们看看“snap.service”。我可以运行命令 'systemctl show snap.service | grep ActiveState'。当我执行命令时,我得到“不活动”的响应。这意味着该服务未激活。如果我为“libvirtd.service”运行命令,那么它会返回为“活动”。

如果服务处于活动状态,则可以使用命令“systemctl stop libvirtd.service”停止该服务。该命令将停止服务,直到您重新启动系统并重新启动。

如果你想在重启后禁用该服务,那么有一个不同的命令。禁用服务的命令是“systemctl disable name.service”。

注意:执行“systemctl”命令时,您可能需要在命令开头使用“sudo”以 Root 身份运行。

优化的系统启动时间

我找到了一个非常好的优化系统,发现时间为:

启动完成时间为 3.863s(固件)+ 13.494s(加载程序)+ 1.637s(内核)+ 4.222s(用户空间)= 23.218s
graphical.target在用户空间 4.217 秒后到达


'systemd-analyze blame' 命令返回以下内容:

2.386s sendmail.service
946ms mysql.service
724ms
systemd-random-seed.service

518ms logrotate.service
499ms systemd-resolved.service
351ms systemd-logind.service
313ms dev-nvme0n1p3.device 306ms
systemd-journald.service
275ms apache2.service
271ms upower.service
217ms udisks2.service
205ms systemd-timesyncd.service
205ms accounts-daemon.service
152 毫秒加仑/分.service
151ms edac.service
144ms lm-sensors.service
139ms loadcpufreq.service
135ms apparmor.service
130ms
systemd-modules-load.service

117ms avahi-daemon.service
115ms bluetooth.service
113ms keyboard-setup.service
109ms systemd-udev-trigger .service
108ms ufw.service
99ms tmp.mount
95ms NetworkManager.service
91ms grub-common.service
87ms binfmt-support.service
86ms alsa-restore.service
77ms [mailto: systemd-fsck@dev-disk-by \x2duuid-277d9b73\x2d1fd1\x2d42e3\x2d9275\x2d1a6febaae04f.服务] systemd-fsck@dev-disk-by \x2duuid-277d9b73\x2d1fd1\x2d42e3\x2d9275\x2d1a6febaae04f.service
77ms hddtemp.service
76ms [邮寄地址:systemd-fsck@dev-disk-by \x2duuid-a9d8fee1\x2debd 3\x2d45f8\x2db30b \x2de0d409fc0c9a.service] systemd-fsck@dev-disk-by \x2duuid-a9d8fee1\x2debd3\x2d45f8\x2db30b\x2de0d409fc0c9a.service
74ms [邮寄地址:systemd-fsck@dev-disk-by \x2duuid-3d237d5 c\x2dc81f\x2d472e\ x2dad35\x2dc12a1ae3adc5.service]systemd-fsck@dev-disk-by \x2duuid-3d237d5c\x2dc81f\x2d472e\x2dad35\x2dc12a1ae3adc5.service
73ms [邮寄地址:systemd-fsck@dev-disk-by \x2duuid-E87C\x2d35EF.service] systemd-fsck@dev -disk-by \x2duuid-E87C\x2d35EF.service
72ms blueman-mechanism.service
71ms ksm.service
67ms thermald.service 67ms
motion.service
66ms user@1000.service
66ms systemd-udevd.service
64ms saslauthd.service
62ms wpa_supplicant.service
55ms colord.service
52ms
grub-initrd-fallback.service

51ms systemd-sysctl.service
51ms dev-disk-by\x2duuid-fcdd39a3\x2d8a94\x2d441b\x2d8245\x2d3388772a6ab9.swap
46ms cpufrequtils.service
44ms polkit.service
43ms kerneloops.service
42ms
netfilter-persistent.service

38ms
systemd-tmpfiles-setup.service

34ms networking.service
32ms sshguard.service
29ms fwupd-refresh.service
23ms console-setup.service
23ms boot-efi .mount
23ms ssh.service
22ms systemd-rfkill.service
20ms rsyslog.service
18ms
systemd-journal-flush.service

18ms
systemd-user-sessions.service

18ms
plymouth-read-write.service

16ms home.mount
16ms proc-sys-fs -binfmt_misc.mount
16ms boot.mount
15ms var.mount
15ms modprobe@drm.service
14ms
systemd-remount-fs.service

13ms
systemd-tmpfiles-setup-dev.service

13ms
plymouth-quit-wait.service

13ms
systemd-update-utmp.service

13ms sys-kernel-config.mount
12ms zram-setup@zram0.service
12ms plymouth-quit.service
11ms
systemd-tmpfiles-clean.service

10ms systemd-sysusers.service
9ms xdm.service
9ms
sys-fs-fuse-connections.mount

8ms dev-hugepages.mount
8ms dev-mqueue.mount
8ms blk-availability .service
7ms e2scrub_all.service
7ms kmod-static-nodes.service
6ms [mailto: systemd-backlight@backlight :nvidia_0.service] systemd-backlight@backlight:nvidia_0.service
5ms user-runtime-dir@1000.service
5ms setvtrgb.service
4ms
systemd-update-utmp-runlevel.service

3ms
nvidia-persistenced.service

3ms ifupdown-pre.service
2ms rtkit-daemon.service
1ms mnt-huge .mount


结论

这两个简单的命令可以帮助您确定系统的引导时间。从这些时候,您可以找到导致系统启动缓慢的任何问题。

我希望这可以帮助您优化系统以提高引导性能。

相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...