首页 > 系统相关 >Linux系统启动速度优化工具systemd-analyze

Linux系统启动速度优化工具systemd-analyze

时间:2024-09-10 16:47:11浏览次数:10  
标签:systemd 系统启动 service dbus enabled Linux analyze 单元

systemd-analyze简介

systemd-analyze是Linux自带的分析系统启动性能的工具。

systemd-analyze可使用的命令:

  • systemd-analyze [OPTIONS…] [time]
  • systemd-analyze [OPTIONS…] blame
  • systemd-analyze [OPTIONS…] critical-chain [UNIT…]
  • systemd-analyze [OPTIONS…] plot [> file.svg]
  • systemd-analyze [OPTIONS…] dot [PATTERN…] [> file.dot]
  • systemd-analyze [OPTIONS…] dump
  • systemd-analyze [OPTIONS…] set-log-level LEVEL
  • systemd-analyze [OPTIONS…] set-log-target TARGET
  • systemd-analyze [OPTIONS…] get-log-level
  • systemd-analyze [OPTIONS…] get-log-target
  • systemd-analyze [OPTIONS…] syscall-filter [SET…]
  • systemd-analyze [OPTIONS…] verify [FILES…]

systemd-analyze命令具体含义:

  • systemd-analyze 可以显示系统启动过程中的性能统计数据、 获取 systemd 系统管理器的状态与跟踪信息、 校验单元文件的正确性。

  • systemd-analyze time 可以显示如下时间: (1)在启动第一个用户态进程(init)之前,内核运行了多长时间; (2)在切换进入实际的根文件系统之前,initrd(initial RAM disk)运行了多长时间; (3)进入实际的根文件系统之后,用户空间启动完成花了多长时间。 注意,上述时间只是简单的计算了系统启动过程中到达不同标记点的时间, 并没有计入各单元实际启动完成所花费的时间以及磁盘空闲的时间。

  • systemd-analyze blame 按照每个单元花费的启动时间从多到少的顺序,列出所有当前正处于活动(active)状态的单元。 这些信息有助于用户优化系统启动速度。 不过需要注意的是,这些信息也可能具有误导性, 因为花费较长时间启动的单元,有可能只是在等待另一个依赖单元完成启动。

  • systemd-analyze critical-chain [UNIT…] 为指定的单元(省略参数表示默认启动目标单元)以树状形式显示时间关键链(time-critical chain)。 “@”后面的时刻表示该单元的启动时刻; “+”后面的时长表示该单元总计花了多长时间才完成启动。 不过需要注意的是, 这些信息也可能具有误导性, 因为花费较长时间启动的单元, 有可能只是在等待另一个依赖单元完成启动。

  • systemd-analyze plot 输出一个 SVG 图像,详细显示每个单元的启动时刻, 并高亮显示每个单元总计花了多长时间才完成启动。

  • systemd-analyze dot 按照 GraphViz dot(1) 格式输出单元间的依赖关系图。 在实践中,通常使用 systemd-analyze dot | dot -Tsvg > systemd.svg 命令来最终生成描述单元间依赖关系的 SVG 图像。 除非使用了 –order 或 –require 选项限定仅显示特定类型的依赖关系, 否则将会显示所有的依赖关系。如果指定了至少一个 PATTERN 参数(例如 *.target 这样的 shell 匹配模式), 那么将会仅显示所有匹配这些模式的单元的直接依赖关系。

  • systemd-analyze dump 按照人类易读的格式输出全部单元的状态(一般都有几千数万行)。 因为它的输出格式经常在未通知的情况下发生变化, 所以切勿将此输出用于程序分析。

  • systemd-analyze set-log-level LEVEL 将 systemd 守护进程的日志等级更改为 LEVEL (可使用的值参见 systemd(1) 的 –log-level= 选项)

  • systemd-analyze set-log-target TARGET 将 systemd 守护进程的日志目标更改为 TARGET (可使用的值参见 systemd(1) 的 –log-target= 选项)

  • systemd-analyze get-log-level 打印出 systemd 守护进程当前的日志等级。

  • systemd-analyze get-log-target 打印出 systemd 守护进程当前的日志目标。

  • systemd-analyze syscall-filter [SET…] 如果指定了至少一个 SET 参数,那么仅显示指定的集合所包含的系统调用列表; 否则显示全部系统调用集合的详情。注意,必须在 SET 参数中包含 “@” 前缀。

  • systemd-analyze verify 校验指定的单元文件以及被指定的单元文件引用的其他单元文件的正确性,并显示发现的错误。 FILES 参数可以是单元文件的精确路径(带有上级目录),也可以仅仅是单元文件的名称(没有目录前缀)。 对于那些仅给出了文件名(没有目录前缀)的单元,将会优先在其他已经给出精确路径的单元文件的所在目录中搜索, 如果没有找到,将会继续在常规的单元目录中搜索(详见unit(5) 手册)。 可以使用 $SYSTEMD_UNIT_PATH 环境变量来更改默认的单元搜索目录。

  • 如果没指定任何命令,那么等价于使用 systemd-analyze time 命令。

systemd-analyze实战

➜~ systemd-analyze
Startup finished in 3.220s (kernel) + 23.420s (userspace) = 26.641s 
graphical.target reached after 23.111s in userspace

可以看到开机用了23秒以上。接下来查询下这锅应该谁背:

➜~ systemd-analyze blame
21.594s NetworkManager-wait-online.service
680ms systemd-logind.service
587ms lvm2-monitor.service
570ms lightdm.service
534ms dev-sdc2.device
371ms upower.service
309ms tlp.service
292ms systemd-timesyncd.service
260ms systemd-udevd.service
252ms ModemManager.service
217ms systemd-journald.service
131ms systemd-journal-flush.service
121ms boot-efi.mount
117ms avahi-daemon.service
115ms bluetooth.service
111ms polkit.service
111ms NetworkManager.service
110ms udisks2.service
102ms systemd-modules-load.service

可以看到NetworkManager-wait-online.service耗时 最长,花了21秒。这里的记时有可能是等待其他服务器启动的,再来看看其关联服务的启动时间:

➜ ~ systemd-analyze critical-chain NetworkManager-wait-online.service
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

NetworkManager-wait-online.service +21.594s
└─NetworkManager.service @1.398s +111ms
└─dbus.service @1.390s
└─basic.target @1.389s
└─sockets.target @1.389s
└─dbus.socket @1.389s
└─sysinit.target @1.384s
└─systemd-backlight@backlight:intel_backlight.service @1.313s +71ms
└─system-systemd\x2dbacklight.slice @1.312s
└─system.slice @207ms
└─-.slice @207ms

可这一看到这里它在等待其他的服务,但是也没有花21秒怎么多。

发现了影响启动的服务,最简单的方式是禁用此服务:

➜ ~ sudo systemctl disable NetworkManager-wait-online.service

方案二:编辑/lib/systemd/system/NetworkManager-wait-online.service文件,将文件中的

[Service] Type=oneshot ExecStart=/usr/bin/nm-online -s -q --timeout=30

超时时间由30改为10

另外,我们来看下还有哪些开机启动的服务可被优化:

➜ ~ systemctl list-unit-files --type=service | grep enabled
[email protected] enabled 
avahi-daemon.service enabled 
bluetooth.service enabled 
bumblebeed.service enabled 
cronie.service enabled 
dbus-org.bluez.service enabled 
dbus-org.freedesktop.Avahi.service enabled 
dbus-org.freedesktop.ModemManager1.service enabled 
dbus-org.freedesktop.NetworkManager.service enabled 
dbus-org.freedesktop.nm-dispatcher.service enabled 
dbus-org.freedesktop.timesync1.service enabled 
display-manager.service enabled 
[email protected] enabled 
lightdm.service enabled 
ModemManager.service enabled 
NetworkManager-dispatcher.service enabled 
NetworkManager.service enabled 
org.cups.cupsd.service enabled 
systemd-fsck-root.service enabled-runtime
systemd-remount-fs.service enabled-runtime
systemd-timesyncd.service enabled 
tlp-sleep.service enabled 
tlp.service enabled
ufw.service enabled 

相关服务对应的功能:

  • NetworkManager-wait-online.service:网络服务管理器,禁用后不影响正常的网络使用
  • [email protected]:登陆相关 保留
  • avahi-daemon.service:让程序自动发现本地网络服务。除非你有兼容的设备或使用 zeroconf 协议的服务,否则应该关闭它。
  • service:蓝牙服务,如果使用也可以禁用
  • service:显卡驱动,保留
  • service:预定日程和时间触发事件的守护进程。保留
  • dbus-org.bluez.service:蓝牙守护进程,可禁止
  • dbus-org.freedesktop.Avahi.service:让程序自动发现本地网络服务。除非你有兼容的设备或使用 zeroconf 协议的服务,否则应该关闭它。
  • dbus-org.freedesktop.ModemManager1.service:用于提供移动宽频broadband(2G/3G/4G)接口。可禁用
  • dbus-org.freedesktop.NetworkManager.service:桌面网卡管理可禁用
  • dbus-org.freedesktop.nm-dispatcher.service:网卡守护进程,可禁用
  • dbus-org.freedesktop.timesync1.service:时间同步,可禁用
  • display-manager.service: 用来管理显示的生命周期,它决定如何根据当前连接的物理显示设备控制其逻辑显示,保留
  • [email protected] enabled:tty控制台相关,保留
  • service enabled:图形化界面显示,保留
  • service: 被 dbus 激活的守护进程,用于提供移动宽频broadband(2G/3G/4G)接口。可禁用
  • NetworkManager-dispatcher.service:网卡守护进程,可禁用
  • service:检测网络、自动连接网络的程序。建议保留
  • cups.cupsd.service:通用UNIX打印系统守护进程.,可禁用
  • systemd-fsck-root.service:负责对根文件系统进行检查,建议保留
  • systemd-remount-fs.service:在系统启动早期启动的服务,它会根据 fstab(5) 中设置的挂载选项,重新挂载根目录与 /usr 目录, 以及虚拟文件系统。这是一个必需的动作, 因为这些文件系统在能够读取 /etc/fstab 文件之前,就已经被预先挂载了, 例如在初始内存盘(initial RAM disk)中挂载、或在进入容器环境前挂载。保留
  • systemd-timesyncd.service:跨网络同步系统时钟的守护服务,可禁用
  • tlp-sleep.service:电池优化,电源管理,建议保留
  • service:电池优化,电源管理,建议保留
  • service: 防火墙服务,建议保留

标签:systemd,系统启动,service,dbus,enabled,Linux,analyze,单元
From: https://www.cnblogs.com/linhaostudy/p/18406710

相关文章

  • fnm安装及配置,Linux中实现node版本管理
    fnm安装及配置,Linux中实现node版本管理源码:Schniz/fnm:......
  • Linux 分区扩容(根分区扩容,SWAP 分区扩容,挂载新分区为目录)
    Linux分区扩容(根分区扩容,SWAP分区扩容,挂载新分区为目录)-sysin|SYStemINside|软件与技术分享请访问原文链接:Linux分区扩容(根分区扩容,SWAP分区扩容,挂载新分区为目录),查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgLinux系统在运行过程中,出现磁盘空间不足,需......
  • Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH的区别
    Linux中PATH、LIBRARY_PATH、LD_LIBRARY_PATH的区别_pathlibrary-CSDN博客这里写目录标题1.PATH2.LIBRARY_PATH3.LD_LIBRARY_PATH1.PATHPATH是可执行文件路径命令行中的命令,如ls等等,都是系统通过PATH找到了这个命令执行文件的所在位置,再run这个命令(可执行文件)。所以,PATH......
  • Linux:du指令
    学习自:Linux命令du详解_du命令-CSDN博客官方文档:http://www.gnu.org/software/coreutils/du1、前言du是diskusage的缩写,即磁盘使用。用于统计文件或目录所占磁盘空间大小。2、用法du选项[目录/文件]3、选项选项说明备注-a显示该目录下所有文件及目录大......
  • Linux+Nginx部署Vue项目
    1.配置nodejs环境下载nodejswgethttps://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz解压nodejstarxfnode-v12.18.1-linux-x64.tar.xz修改/etc/profile文件,再最下面加上exportPATH=$PATH:/root/node-v12.18.1-linux-x64/bin使/etc/profile文件立即生效source/et......
  • linux常用命令
    一、Linux发行版本常见的Linux发行版及其主要区别:Ubuntu特点:用户友好,适合新手,拥有广泛的社区支持。用途:桌面、服务器和云计算。包管理:APT(Debian包管理系统)CentOS/RockyLinux特点:稳定性高,适合生产环境,基于RedHatEnterpriseLinux(RHEL)。......
  • linux中磁盘大小和文件系统大小
    在Linux系统中,磁盘大小和文件系统大小是两个不同的概念,它们之间存在明显的区别。以下是对这两个概念的详细解析:磁盘大小定义:磁盘大小指的是物理存储设备的总容量,即硬盘或固态硬盘(SSD)等存储介质上能够存储数据的总空间。这个大小是固定的,由磁盘的制造工艺和规格决定。特点:固......
  • 如何利用Linux提升工作效率和安全性?
    Linux,作为一款自由和开放源代码的操作系统,已经在全球范围内得到了广泛的应用。无论是服务器、云计算、物联网,还是超级计算机,Linux都扮演着重要的角色。本文将深入探讨Linux的应用场景,以及如何利用Linux提升工作效率和安全性。01麒服务器领域的佼佼者Linux在服务器领域的应用......
  • Linux 使用ssh-agent
    以zsh为例:vi~/.zshrc#增加内容source/tmp/my-ssh-agent.env......
  • 安装linux记录
    1.目标:把windows上python脚本运行ray集群迁移到linux上,ubuntu22.042.踩坑:dpkg崩溃重装系统3.安装sshwin上安装xftp7unix安装openssh服务4.能通过xftp7传输文件到unix5.乱码xftp:文件当前对话属性选项连接-编码6.更改权限7.安装python3.10.14只能自己打包安装https......