(一)systemd-analyze
1 systemd-analyze [OPTIONS...] [time]
启动时间:内核态时间+用户态时间.
2 systemd-analyze blame
显示上次开机时的所有服务,并显示服务耗时.
3 systemd-analyze [OPTIONS...] critical-chain [UNIT...]
为指定的单元(省略参数表示默认启动目标单元)以树状形式显示时间关键链(time-critical chain)。
"@"后面的时刻表示该单元的启动时刻; "+"后面的时长表示该单元总计花了多长时间才完成启动。
不过需要注意的是, 这些信息也可能具有误导性, 因为花费较长时间启动的单元, 有可能只是在等待另一个依赖单元完成启动。
#systemd-analyze critical-chain smbd.service
给出的树形关键路径就是该unit的最长耗时路径.
4 systemd-analyze [OPTIONS...] plot [> file.svg]
输出一个 SVG 图像,详细显示每个单元的启动时刻, 并高亮显示每个单元总计花了多长时间才完成启动。
#systemd-analyze plot > boot.svg
详细的systemd启动流程,直到graphical.target.
boot.svg拖入浏览器显示.
5 systemd-analyze [OPTIONS...] dot [PATTERN...] [> file.dot]
apt install graphviz
按照 GraphViz dot(1) 格式输出单元间的依赖关系图,绘制unit间的依赖关系.
#systemd-analyze dot smbd.service | dot -Tsvg > systemd.svg
#用浏览器打开查看
#systemd-analyze dot 'dbus*' | dot -Tsvg > dus.svg
把所有名称以 "dbus"开头的单元的依赖关系绘制成一张图
#systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg
把所有 target 单元之间的依赖关系绘制成一张图
--from-pattern=, --to-pattern=
仅可与 dot 命令一起使用, 用于筛选可以出现在依赖关系图中的单元。 这两个选项都接受一个符合 glob(7) 规范的 shell 匹配模式(例如 *.target), 用于匹配单元的名称。
可以多次使用这两个选项, 以筛选 最终允许出现在依赖关系图中的单元, 多个选项的组合规则如下:
先将多个"from"选项视为一组(内部用"OR"逻辑连接)、 再将多个"to"选项视为一组(内部用"OR"逻辑连接), 最后再将"from"组与"to"组之间用"AND"逻辑连接。 最终计算出可以出现在依赖关系图中的单元。
#systemd-analyze dot network.target network-pre.target network-online.target | dot -Tsvg >network.svg
network.target的依赖图里可能有其他的target,可以同时展开所有的target
6 systemd-analyze unit-paths
列出与单元相关的全部目录, 包括:单元文件目录、配置片段目录(.d)、 依赖关系目录(.wants 与 .requires)。
与 --user 一起使用时表示针对 systemd 用户实例。与 --global 一起使用时表示针对 systemd 用户实例的全局配置。
(二)systemctl
1 systemctl list-units --all --type=service
列出系统所有服务
2 systemctl status dummy.service
查看service状态
3 systemctl is-enabled dummy.service
查看service是否开启
4 systemctl enable dummy.service
开启service
5 systemctl disable dummy.service
关闭service
6 systemctl list-dependencies lightdm
显示出lightdm的必须依赖,即systemd-analyze dot画出的svg中的黑色线条
参考资料:
使用systemd-analyze 工具来分析各个服务进程的启动性能_weixin_30701521的博客-CSDN博客