systemd-analyze命令

systemd-analyze 命令 #

systemd-analyze是一个用于分析 systemd 系统启动性能的工具。它可以帮助识别启动过程中的瓶颈,显示各个服务的启动时间,以及生成启动过程的可视化图表。

语法 #

systemd-analyze [选项...] 命令 [参数...]

常用命令 #

基本分析 #

1. 显示系统启动总时间 #

systemd-analyze

输出示例:

Startup finished in 4.915s (kernel) + 11.547s (userspace) = 16.462s
graphical.target reached after 11.530s in userspace

2. 显示各个服务的启动时间 #

systemd-analyze blame

输出示例:

8.225s NetworkManager-wait-online.service
3.156s dev-sda1.device
2.215s snapd.service
1.286s networkd-dispatcher.service
1.026s udisks2.service
 989ms accounts-daemon.service
 940ms dev-loop0.device
 ...

3. 显示启动过程中的关键链 #

systemd-analyze critical-chain

输出示例:

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.

graphical.target @11.530s
└─multi-user.target @11.530s
  └─snapd.service @9.315s +2.215s
    └─basic.target @9.297s
      └─sockets.target @9.297s
        └─snapd.socket @9.297s
          └─sysinit.target @9.289s
            └─apparmor.service @8.980s +308ms
              └─local-fs.target @8.975s
                └─run-user-1000.mount @12.784s
                  └─local-fs-pre.target @8.974s
                    └─systemd-tmpfiles-setup-dev.service @4.822s +151ms
                      └─kmod-static-nodes.service @4.780s +39ms
                        └─systemd-journald.socket @4.775s
                          └─-.mount @4.775s
                            └─system.slice @4.775s
                              └─-.slice @4.775s

可视化分析 #

1. 生成启动过程的 SVG 图表 #

systemd-analyze plot > boot.svg

这将生成一个启动过程的 SVG 图表,可以在浏览器中打开查看。

2. 生成启动过程的 DOT 图表 #

systemd-analyze dot | dot -Tsvg > systemd.svg

需要安装 graphviz 包才能使用 dot 命令。

3. 生成特定单元的依赖图 #

systemd-analyze dot nginx.service | dot -Tsvg > nginx-deps.svg

安全分析 #

1. 分析系统安全设置 #

systemd-analyze security

这将显示系统中各个服务的安全评分和设置。

2. 分析特定服务的安全设置 #

systemd-analyze security nginx.service

验证和调试 #

1. 验证单元文件 #

systemd-analyze verify /etc/systemd/system/myservice.service

2. 转储单元配置 #

systemd-analyze dump

3. 日历事件计算 #

systemd-analyze calendar "Mon *-*-* 12:00:00"

这将计算下一次触发时间。

常见用法示例 #

1. 识别启动慢的服务 #

systemd-analyze blame | head -10

这将显示启动时间最长的 10 个服务。

2. 分析特定服务的启动时间 #

systemd-analyze critical-chain nginx.service

3. 生成启动过程的可视化图表 #

systemd-analyze plot > boot.svg
firefox boot.svg  # 或其他浏览器

4. 检查系统启动时间随时间的变化 #

systemd-analyze time
systemd-analyze timestamp

5. 分析服务的安全性 #

systemd-analyze security --no-pager

6. 验证自定义服务文件 #

systemd-analyze verify /etc/systemd/system/myapp.service

注意事项 #

  • systemd-analyze需要 systemd 作为系统的初始化系统
  • 某些命令(如security)可能需要较新版本的 systemd
  • 生成图表的命令可能需要安装额外的软件包(如 graphviz)
  • 分析结果可能因系统配置和硬件而异
  • 在生产环境中,应谨慎使用可能影响系统性能的分析工具