systemd-analyze 是 linux 中用于查看系统启动耗时及分析服务启动性能的工具。运行 systemd-analyze 可查看总启动时间,如内核和用户空间各耗时多久;使用 systemd-analyze blame 可列出所有服务启动耗时,便于排查慢启动服务;结合 grep 可查特定服务(如 ssh.service)的启动时间;通过 journalctl -u 服务名 可查看服务详细日志;执行 systemd-analyze critical-chain 可分析关键服务依赖链,优化启动顺序;还可编写脚本配合 cron 定期记录启动性能,便于长期监控与问题对比分析。
linux系统中,如果你用的是基于systemd的发行版(比如centos 7+、ubuntu 16.04及以上),想知道某个服务是什么时候启动的,或者想分析系统整体启动性能,systemd-analyze 是一个非常实用的工具。
它不仅能查服务的启动时间,还能帮你找出拖慢开机速度的“罪魁祸首”。下面我们就从几个常见使用场景出发,看看怎么用好这个工具。
如何查看系统整体启动耗时
运行 systemd-analyze 不带任何参数,会输出系统本次启动的总体时间统计。例如:
Startup finished in 4s 200ms 100μs (kernel) + 6s 500ms 300μs (userspace) = 10s 700ms
这表示内核启动用了大约4秒,用户空间启动用了6秒多,总启动时间是10秒出头。
如果你想要更详细的时间线图示,可以加上 blame 子命令:
systemd-analyze blame
它会列出所有服务按启动时间排序,排在最前面的就是耗时最长的服务。这对排查开机慢的问题很有帮助。
查看特定服务的启动时间
想知道某个服务具体什么时候开始启动、用了多久,可以用 blame 结合 grep 来过滤,例如:
systemd-analyze blame | grep ssh
你可能会看到类似这样的输出:
800ms ssh.service
说明这个服务花了800毫秒才完成启动。
如果你需要更详细的日志信息,也可以结合 journalctl 使用:
journalctl -u ssh.service --since "1 hour ago"
这样就能看到最近一小时内的服务日志,包括启动和停止时间点。
分析服务之间的依赖关系
systemd-analyze 还有个 critical-chain 命令,可以用来查看关键路径上的服务依赖链。执行:
systemd-analyze critical-chain
它会显示一条影响整体启动时间的关键服务链,比如:
graphical.target @10s └─multi-user.target @10s └─sshd.service @9s 500ms +500ms └─network.target @9s 500ms └─NetworkManager-wait-online.service @8s +1s
可以看到每个服务的启动时间和持续时间,以及它们之间的依赖关系。这对于优化启动顺序、减少串行等待非常有帮助。
小技巧:定期检查系统启动表现
你可以设置一个定时任务,每周记录一次系统的启动时间和服务耗时情况。比如写个脚本:
#!/bin/bash LOGFILE="/var/log/boot_time.log" echo "=== $(date) ===" >> $LOGFILE systemd-analyze >> $LOGFILE systemd-analyze blame | head -20 >> $LOGFILE
然后通过 cron 定期执行,就可以长期监控系统的启动性能变化了。
另外,如果发现某次更新后开机变慢,可以通过对比前后的 blame 输出,快速定位问题源头。
基本上就这些,systemd-analyze 虽然看起来简单,但用好了能解决不少实际问题,特别是在服务器调优和故障排查时特别有用。