Linux系统启动速度优化工具systemd-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
autovt@.service 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
getty@.service 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:网络服务管理器,禁用后不影响正常的网络使用
- autovt@.service:登陆相关 保留
- 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: 用来管理显示的生命周期,它决定如何根据当前连接的物理显示设备控制其逻辑显示,保留
- getty@.service 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: 防火墙服务,建议保留
Linux系统启动速度优化工具systemd-analyze的更多相关文章
- Linux 系统基础优化和常用命令
目录 Linux 系统基础优化和常用命令 软连接 tar解压命令 gzip命令 netstart命令 ps命令 kill命令 killall命令 SELinux功能 iptables防火墙 Linux ...
- 运维 07 Linux系统基础优化及常用命令
Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令 ...
- Linux/Android 性能优化工具 perf
/***************************************************************************** * Linux/Android 性能优化工 ...
- Linu之linux系统基础优化和基本命令
Linux系统基础优化和基本命令 网络参数设定命令 ifconfig: 查询,设置网卡和ip等参数 ifup,ifdown: 脚本命令,更简单的方式 ip: 符合指令,直接修改上述功能 编辑网卡配置文 ...
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...
- linux系统监控常用工具
linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h 显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...
- Linux系统监控实用工具Glances
Linux系统监控实用工具Glances Glances安装 Glances安装要求:python >= 2.6 和 psutil >= 0.4.1 1.第一步,安装了python-> ...
- Linux系统IO分析工具之iotstat常用参数介绍
Linux系统IO分析工具之iotstat常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.安装iostat [root@flume115 ~]# yum - ...
- Linux系统IO分析工具之iotop常用参数介绍
Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...
- Linux系统基础优化及常用命令
Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和 ...
随机推荐
- 机器学习:详解什么是端到端的深度学习?(What is end-to-end deep learning?)
什么是端到端的深度学习? 深度学习中最令人振奋的最新动态之一就是端到端深度学习的兴起,那么端到端学习到底是什么呢?简而言之,以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理.那么端到端深度学 ...
- 【Spring-Security】Re07 持久化的记住我
Security记住我功能底层实现依赖于SpringJDBC组件,如果有持久层框架的话,就由持久层框架实现 演示案例的选型,MysqlJdbc + MybatisStarter <depende ...
- 关于工业AI辅助制造(模具设计、模样生产制造环节)
关于工业AI辅助制造(模具设计.模样生产制造环节) AI技术的具体使用场景: AI辅助模具设计: AI辅助模具安装工艺参数调整. 具体方案设想: AI辅助模具设计: 使用AI大模型对历史已有的设计方案 ...
- 使用AI技术(单张图片或文字)生产3D模型 —— Ai生成3D模型的时代来了
地址: https://www.bilibili.com/video/BV1A2421P7pH/ 视频用到的工具voxcraft体验地址:https://voxcraft.ai/
- 一个简单的例子测试numpy和Jax的性能对比 (续)
相关: 一个简单的例子测试numpy和Jax的性能对比 numpy代码: import numpy as np import time x = np.random.random([10000, 100 ...
- 模仿学习算法:Data Aggregation Approach: DAGGER算法——Mixing policy
论文: <A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning> ...
- JS Map对象与map方法
前言 最近遇到一个遍历的问题,查资料的过程中,发现有个 Map 对象,提供了很多方法可以轻松地获取我们想要的数据,之前只知道有 map ,没想到还有 Map ,是不是有点绕?不急,这两个东西都是虽然 ...
- MySQL 优化慢查询
查询以SELECT 语句的形式执行数据库中的所有查找操作.调整这些语句是重中之重,无论是实现动态网页的亚秒响应时间,还是缩短数小时生成大量夜间报告的时间. 此外SELECT语句,进行查询调谐技术也适用 ...
- 痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题探析. 前段时间有一个 RT1052 客户反馈了一个有趣的问题, ...
- lbs 地理位置
lbs 地理位置 https://caorong.github.io/2018/05/04/lbs/ https://www.cnblogs.com/lbser/p/3310455.html http ...