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的更多相关文章

  1. Linux 系统基础优化和常用命令

    目录 Linux 系统基础优化和常用命令 软连接 tar解压命令 gzip命令 netstart命令 ps命令 kill命令 killall命令 SELinux功能 iptables防火墙 Linux ...

  2. 运维 07 Linux系统基础优化及常用命令

    Linux系统基础优化及常用命令   Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令 ...

  3. Linux/Android 性能优化工具 perf

    /***************************************************************************** * Linux/Android 性能优化工 ...

  4. Linu之linux系统基础优化和基本命令

    Linux系统基础优化和基本命令 网络参数设定命令 ifconfig: 查询,设置网卡和ip等参数 ifup,ifdown: 脚本命令,更简单的方式 ip: 符合指令,直接修改上述功能 编辑网卡配置文 ...

  5. Linux实战教学笔记06:Linux系统基础优化

    第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...

  6. linux系统监控常用工具

    linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h  显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...

  7. Linux系统监控实用工具Glances

    Linux系统监控实用工具Glances Glances安装 Glances安装要求:python >= 2.6 和 psutil >= 0.4.1 1.第一步,安装了python-> ...

  8. Linux系统IO分析工具之iotstat常用参数介绍

    Linux系统IO分析工具之iotstat常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.安装iostat [root@flume115 ~]# yum - ...

  9. Linux系统IO分析工具之iotop常用参数介绍

      Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...

  10. Linux系统基础优化及常用命令

    Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和 ...

随机推荐

  1. 一文带你了解CAP的全部特性,你学会了吗?

    目录 前言 消息发布 携带消息头 设置消息前缀 原生支持的延迟消息 并行发布消息 事务消息 事务消息发送 事务消息消费 事务补偿 消息处理 序列化 过滤器 消息重试 多线程处理 自动恢复/重连 分布式 ...

  2. 8、SpringMVC之RESTful案例

    阅读本文前,需要先阅读SpringMVC之RESTful概述 8.1.前期工作 8.1.1.创建实体类Employee package org.rain.pojo; import java.io.Se ...

  3. 【PHP】5版本 过程式操作MySQL

    建立连接和释放连接: # 连接参数 $sever = 'localhost:3309'; $username = 'root'; $password = 'root'; # 调用连接方法,如果失败结束 ...

  4. 【MySQL】Windows-8.0.19 安装版 下载安装

    下载地址 https://dev.mysql.com/downloads/windows/installer/8.0.html 跳过登陆 只选择基本服务 安装依赖环境,如果已存在,圆圈显示绿点,下一步 ...

  5. 【Mybatis】记录下一些问题

    报错信息: 找不到映射的结果Map 其实这里的包的名字和资源的名字都是正确的 但是啊,但是啊,在Mapper.xml上面的命名空间的声明上换行了,这就能导致Mybatis找不到这个资源: 我和同事看了 ...

  6. 【SpringCloud】Re04 Gateway

    微服务网关: 1.身份认证 和 权限校验 2.服务路由.负载均衡 3.请求限流 搭建服务网关: 网关是一个独立的服务,同样需要被注册中心注册到,这里依然使用的是Nacos <?xml versi ...

  7. Nvidia的Metropolis平台 —— AI监控解决方案和视频分析技术

    相关: https://baijiahao.baidu.com/s?id=1566933142821989&wfr=spider&for=pc https://baijiahao.ba ...

  8. 灵巧手 —— 智能仿生手 —— 人形机器人(humanoid)

    产品主页: https://www.brainco.cn/#/product/brain-robotics 国内销售的一款产品,美国华人生产的,灵巧度非常高的一款仿生手产品.

  9. springboot接口入参下划线转驼峰以及返回参数驼峰转下划线实现

    1.背景 在实际开发中,通常来说java里面是使用驼峰的命名规则; 但是有时候在对接其他三方平台的接口时,要求使用下划线的命名规则,这时候就涉及到如何让自己的接口满足三方平台的下划线; 实现方式有 1 ...

  10. quartz监控日志(二)添加监听器

    上一章介绍监控job有三种方案,其实还有一个简单方案是实现quartz的TriggerListener. 上次我也试了这个方案,但是由于操作错误,导致没有监控成功,所以才选择分析源码来实现代理进行监控 ...