您是否在使用 systemd 系统和服务管理器,并且您的 Linux 系统需要较长时间才能启动,或者您希望查看系统启动性能的报告? 如果是的话,你已经登陆了正确的地方。

在本文中,我们将向您展示如何使用systemd-analyze来分析 Linux 系统启动性能统计信息, systemd是 systemd 中用于系统管理的众多实用程序之一。

另请参阅 : 如何在远程 Linux 服务器上控制系统服务

要获得系统启动时间的概述,我们可以运行systemd-analyze命令而不带任何参数,如下所示。 它将列出每个服务启动需要多长时间的信息,其中包括启动时内核,initrd 和用户空间占用的时间。

  1. # systemd-analyze
  2. Startup finished in 884ms (kernel) + 3.861s (initrd) + 48.356s (userspace) = 53.102s

如果要查看所有正在运行的单位的列表,按其初始化时间排序(最高时间位于最前面),blame 子命令用于此目的。 运行后面的命令后,使用[Enter]查看列表中的更多服务,然后q退出。

  1. # systemd-analyze blame
找出每个单位的时间开始
  1. 16.159s mariadb.service
  2. 12.178s libvirtd.service
  3. 10.298s tuned.service
  4. 9.836s postfix.service
  5. 8.704s lsws.service
  6. 7.352s lscpd.service
  7. 4.988s [email protected]
  8. 4.779s NetworkManager-wait-online.service
  9. 4.577s lvm2-monitor.service
  10. 4.439s ModemManager.service
  11. 4.413s polkit.service
  12. 4.280s dev-sda1.device
  13. 4.225s systemd-udev-settle.service
  14. 3.957s firewalld.service
  15. 3.227s rhel-dmesg.service
  16. 3.221s abrt-ccpp.service
  17. 3.142s rsyslog.service
  18. 3.053s avahi-daemon.service
  19. 3.042s pure-ftpd.service
  20. 2.249s gssproxy.service
  21. 2.212s NetworkManager.service
  22. 1.889s proc-fs-nfsd.mount
  23. 1.780s systemd-tmpfiles-setup-dev.service
  24. 1.451s sshd.service
  25. 1.267s rhel-readonly.service
  26. 1.035s sysstat.service
  27. 1.001s rpc-statd-notify.service
  28. 910ms systemd-logind.service
  29. 739ms kdump.service
  30. 738ms network.service
  31. ...

从上面的输出中可以看出,每台设备都是基于所花费的时间进行排序的,您可以简单地找出哪些服务在启动和分析问题时花费的时间较长。

接下来,我们还可以使用 critical-chain 子命令查看默认目标或指定单元列表的时间关键链的树,如图所示。

  1. # systemd-analyze critical-chain
为默认目标打印时间关键链
  1. The time after the unit is active or started is printed after the "@" character.
  2. The time the unit takes to start is printed after the "+" character.
  3. multi-user.target @48.342s
  4. └─mariadb.service @31.560s +16.159s
  5. └─network.target @31.558s
  6. └─network.service @30.819s +738ms
  7. └─NetworkManager-wait-online.service @26.035s +4.779s
  8. └─NetworkManager.service @23.821s +2.212s
  9. └─network-pre.target @23.821s
  10. └─firewalld.service @19.863s +3.957s
  11. └─polkit.service @15.381s +4.413s
  12. └─basic.target @12.271s
  13. └─sockets.target @12.271s
  14. └─virtlockd.socket @12.270s
  15. └─sysinit.target @12.251s
  16. └─systemd-update-utmp.service @12.196s +54ms
  17. └─auditd.service @11.705s +486ms
  18. └─systemd-tmpfiles-setup.service @11.609s +93ms
  19. └─rhel-import-state.service @11.397s +211ms
  20. └─local-fs.target @11.363s
  21. └─run-user-0.mount @46.910s
  22. └─local-fs-pre.target @10.575s
  23. └─lvm2-monitor.service @5.996s +4.577s
  24. └─lvm2-lvmetad.service @7.376s
  25. └─lvm2-lvmetad.socket @5.987s
  26. └─-.slice
  1. # systemd-analyze critical-chain ntp.service networking.service

最后,让我们看看一个更重要的子命令,它允许生成图形(svg 格式)详细的已启动的系统服务,以及在什么时候突出显示它们的初始化时间,如下所示。

确保图形显示模式或 x-windows 已启用以查看绘图。

  1. # systemd-analyze plot > boot_analysis.svg
  2. # xviewer boot_analysis.svg

Linux 启动分析

以上所有命令都将打印本地机器的启动性能统计信息。 要通过ssh从远程主机查看信息,请使用-H标志并指定[email protected]指令,如图所示。

  1. # systemd-analyze time -H [email protected]
  2. # systemd-analyze blame -H [email protected]
  3. # systemd-analyze critical-chain -H [email protected]

systemd-analysis也可用于从系统和 systemd(服务管理器)等中查找其他状态和跟踪信息。 有关更多信息,请参阅其手册页。

  1. # man systemd-analyze

另请参阅 : 如何在 SystemD 中更改运行级别(目标)

systemd-analyze – 在Linux中查找系统启动性能统计信息的更多相关文章

  1. linux中查找命令find、locate、whereis、which、type区别

    linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...

  2. linux中查找文件属于那个软件包的方法

    一.linux中查找文件属于那个软件包的方法 [root@salt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/ ...

  3. 在Amazon FreeRTOS V10中使用运行时统计信息

    在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考 ...

  4. Linux中查找最耗性能的JAVA代码

    在这里总结一下查找Linux.Java环境下最耗CPU性能的代码段的方法.基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程).使用jstack把java线程堆栈给dump下来.然后,在堆 ...

  5. linux中查找(find、locate、which、whereis、grep)命令汇总、帮助命令(man、whatis、apropos、info、help)汇总

    (一)find命令详解 find:功能:文件搜索: 语法:find[搜索范围][匹配条件]:  只要匹配条件完全符合才可以被显示,使用通配符*匹配条件*则可以显示匹配条件的所有目录,问号?匹配单个字符 ...

  6. 如何使用find命令在Linux中查找文件

    Linux Find命令是Linux系统管理员工具库中最强大的工具之一. Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索目录层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作 ...

  7. 在Linux中监视IO性能

    dd命令 iostat命令 理解iostat的各项输出 iostat的应用实例 附:在Windows中监视IO性能 延伸阅读 dd命令 dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具 ...

  8. linux中查找命令find、locate、whereis、which、type的区别

    find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/var/lib/locatedb)文件不同,find查找的是磁盘空间. locate locate命令其实 ...

  9. 在 Linux 中查找和删除重复文件

    原文链接:https://www.linuxprobe.com/linux-FSlint.html FSlint同时具有GUI和CLI模式.因此,对于新手来说,这是一个用户友好的工具.FSlint不仅 ...

随机推荐

  1. mycat中间件--schema.xml配置文件详解

    schema.xml管理着MyCat的逻辑库.表.分片规则.DataNode以及DataSource.弄懂这些配置,是正确使用MyCat的前提. <?xml version="1.0& ...

  2. Maven 入门——认识 Maven

    Maven /ˈmāvən/ ,可以翻译成"专家",是一款来自 Apache 组织的开源项目,用于项目管理.主要服务于基于 Java 平台的项目构建.依赖管理和项目信息管理. 构建 ...

  3. 让浏览器兼容ES6语法(gulp+babel)

    使用gulp+babel搭建ES6环境 前言 我们查阅资料可以知道ECMAScript 2015(简称ES6)已经于2015年发布,由于用户使用的浏览器版本在安装的时候可能早于ES6的发布,而到了今天 ...

  4. Redhat6.8下安装Oracle11gR2

    Step1.配置本地yum源,方便安装依赖包 df -h 补充: df命令查看 linux系统磁盘空间以及使用情况,-h代表方便阅读方式显示  :/dev/sr0为光驱设备名 mkdir cdrom ...

  5. python服务器环境搭建Flask,uwsgi和nginx

    python服务器环境搭建Flask,uwsgi和nginx 环境配置 服务器配置  [部署系统环境Ubuntu] 使用python的Flask框架搭建好网页后台后,便要开始将网站部署到服务器平台了. ...

  6. Docker基础-端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...

  7. Docker配置daocloud加速器

    首先注册daocloud网站的账号(免费的!!!),并登陆自己的账号,并在这里获取自己的daocloud加速器配置脚本. 获取到自己的daocloud加速器配置脚本之后只需要在已安装Docker服务的 ...

  8. C# winform 无边框 窗体的拖动

    当船体设置为FormborderStyle='none' [DllImport("user32.dll")] public static extern bool ReleaseCa ...

  9. 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案

    Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...

  10. 深入理解Java线程池:ThreadPoolExecutor

    线程池介绍 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题: 如果并发的请求数量非常多,但每个线 ...