systemd-analyze命令:Linux系统启动分析

news2024/11/17 11:56:06

一、命令简介

  • 用途: systemd-analyze ​命令用于分析系统引导过程的时间性能。
  • 标签: 系统管理,性能分析。
  • 相关命令: systemd-bootchart​, systemd-cgtop​, systemd-resolve​.

二、命令参数

命令格式

systemd-analyze [OPTIONS...] COMMAND ...

选项和参数

systemd-analyze [OPTIONS...] COMMAND ...

系统分析,显示单元依赖关系,检查单元文件。

命令:
  [time]                   打印启动系统所需的时间
  blame                    按初始化时间排序打印正在运行的单元列表
  critical-chain [UNIT...] 打印单元的关键时间链的树形结构
  plot                     输出显示服务初始化的SVG图形
  dot [UNIT...]            输出dot(1)格式的依赖图
  dump                     输出服务管理器的状态序列化
  cat-config               显示配置文件和补充配置
  unit-files               列出单元的文件和符号链接
  unit-paths               列出单元的加载目录
  exit-status [STATUS...]  列出退出状态的定义
  capability [CAP...]      列出能力的定义
  syscall-filter [NAME...] 打印seccomp过滤器中的系统调用列表
  condition CONDITION...   评估条件和断言
  verify FILE...           检查单元文件的正确性
  calendar SPEC...         验证重复的日历时间事件
  timestamp TIMESTAMP...   验证时间戳
  timespan SPAN...         验证时间跨度
  security [UNIT...]       分析单元的安全性

选项:
  -h --help                显示此帮助信息
     --version             显示软件包版本
     --no-pager            不要将输出传送到分页器
     --system              在系统 systemd 实例上操作
     --user                在用户 systemd 实例上操作
     --global              在全局用户配置上操作
  -H --host=[USER@]HOST    在远程主机上操作
  -M --machine=CONTAINER   在本地容器上操作
     --order               仅在图中显示顺序
     --require             仅在图中显示需求
     --from-pattern=GLOB   仅在图中显示源
     --to-pattern=GLOB     仅在图中显示目标
     --fuzz=SECONDS        还打印比分支中最新完成时间早SECONDS的服务
     --man[=BOOL]          是否检查man页面的存在
     --generators[=BOOL]   是否运行单元生成器(需要权限)
     --iterations=N        显示指定数量的迭代次数
     --base-time=TIMESTAMP 相对于指定时间计算日历时间

详细信息请参阅 systemd-analyze(1) man 页面。

三、命令示例

1 系统启动耗时-概览

systemd-analyze

总时间=内核时间 + 用户时间

Clip_2024-09-28_14-18-40

2 系统启动耗时-详细

systemd-analyze blame

这个命令会按服务打印出启动所花费的时间,并按照每个服务启动所花费的时间从大到小排序,帮助你识别启动过程中的瓶颈。

Clip_2024-09-28_14-45-43

可使用 tac 命令,让结果升序排列。

systemd-analyze blame | tac

这样你就可以看到系统启动时,服务启动的顺序了。

   27us blk-availability.service
    6ms update-notifier-motd.service
    6ms snapd.socket
    7ms user-runtime-dir@1000.service
    9ms systemd-update-utmp-runlevel.service
   10ms ufw.service
   10ms plymouth-quit-wait.service
   10ms proc-sys-fs-binfmt_misc.mount
   10ms sys-kernel-config.mount
   11ms sys-fs-fuse-connections.mount
   12ms docker.socket
...
 6.588s fwupd-refresh.service
10.580s apt-daily-upgrade.service
12.108s apt-daily.service

3 特定服务的启动耗时

systemd-analyze critical-chain [unit]

这个命令会显示服务启动的"关键链",你可以指定一个服务单元来查看它的详细启动耗时和依赖关系。

Clip_2024-09-28_14-56-32

  • 第一个依赖在系统启动后 343ms 启动,最后一个依赖在系统启动后 4.449s 启动。
  • 启动 ssh.service 耗时 21ms

4 系统启动耗时-图表

systemd-analyze plot > boot-up.svg

这个命令会生成一个 SVG 图表,显示启动过程中各个服务单元的启动时间和依赖关系。有没有觉得更直观了。

Clip_2024-09-28_17-15-15

​​

5 系统启动日志-等级设置

systemd-analyze log-level

这个命令可以查看系统启动过程中的日志级别设置。

Clip_2024-09-28_15-09-19

输出 info​ 表示 systemd 当前的日志级别设置为 info​。这意味着 systemd 将记录有关单元、服务和其他系统组件状态变化的信息性消息。以下是 systemd 支持的不同日志级别的简要概述:

  • emerg:系统无法使用。
  • alert:必须立即采取行动。
  • crit:临界条件。
  • err:错误条件。
  • warning:警告条件。
  • notice:正常但重要的条件。
  • info:信息性消息。
  • debug:调试级别的消息。

如果你想更改日志级别,可以将上述级别之一作为参数传递给命令。例如,要将日志级别设置为 debug​ 以获取更详细的日志进行故障排除,你可以使用:

systemd-analyze log-level debug

Clip_2024-09-28_15-13-03

请注意,将日志级别更改为更详细的设置(如 debug​)可能会生成大量日志数据,这可能会影响系统性能并迅速填满日志文件。一旦完成故障排除,请务必将日志级别设置回不那么详细的设置,如 info​ 或 notice​。

查看系统启动日志

可以使用以下任一命令查看系统启动日志

  • sudo dmesg
  • sudo journalctl -b -0

6 服务的依赖关系

systemd-analyze dot [unit] > /path/to/graph.dot

这个命令可以生成一个服务的依赖关系图,如果你指定了一个服务单元,它将仅生成该服务的依赖关系图。


sudo systemd-analyze dot > /path/to/graph.dot
# 或者,只为特定的服务生成依赖关系图
sudo systemd-analyze dot sshd.service > /path/to/dbus_graph.dot

在这个例子中,/path/to/graph.dot​ 是你希望保存生成的点格式文件的路径。如果你想要生成特定 systemd 单元的依赖关系图,你可以像第二个命令那样指定该单元的名称(例如 dbus.service​)。
一旦你有了这个 .dot​ 文件,你可以使用 Graphviz 工具集来将其转换为可视化的图形格式,比如 PNG 或 SVG。下面是如何使用 dot​ 命令(来自 Graphviz)来转换 .dot​ 文件为 PNG 图片的示例:

# 安装 Graphviz(如果尚未安装)
sudo apt-get install graphviz
# 将 dot 文件转换为 PNG 图片
dot -Tpng /path/to/graph.dot > /path/to/graph.png

这里,/path/to/graph.dot​ 是你之前创建的 dot 文件,/path/to/graph.png​ 是你希望保存生成的 PNG 图片的路径。

Clip_2024-09-28_15-37-28

最终生成的图像

graph

  • 黑色(black) :表示 “Requires” 关系,即一个服务单元启动需要依赖的其他服务单元。
  • 深蓝色(dark blue) :表示 “Requisite” 关系,这种依赖比 “Requires” 更强,它要求依赖的服务单元必须已经启动成功。
  • 深灰色(dark grey) :表示 “Wants” 关系,这是一个比较弱的依赖关系,表示一个服务单元希望某个其他服务单元也启动,但不是必需的。
  • 红色(red) :表示 “Conflicts” 关系,即一个服务单元与另一个服务单元有冲突,不能同时运行。
  • 绿色(green) :表示 “After” 关系,即一个服务单元需要在另一个服务单元之后启动。

7 查看特定服务的状态

systemd-analyze unit-paths

这个命令显示 systemd​ 单元文件的路径。

Clip_2024-09-28_16-01-04

这些目录中的单元文件定义了 systemd 如何管理服务和系统资源。通过在这些目录中放置或修改单元文件,系统管理员可以定制和控制系统的行为。

8 安全性检查

systemd-analyze security [unit]

这个命令对指定的服务执行安全性检查,并提供一个关于该服务安全配置的详细报告。

所有单元总览

Clip_2024-09-28_16-13-01

浏览指定单元

Clip_2024-09-28_16-16-12

systemd-analyze security [unit]​ 是一个用于分析和调试 systemd 系统管理器的命令,它特别关注于服务的安全性和沙箱设置。这个命令可以帮助您检查和改善 systemd 服务的安全性。

以下是关于这个命令的一些详细信息和使用方法:

  1. 命令功能:

    • 这个命令用于分析指定的服务单元([unit]​)的安全和沙箱设置。
    • 如果没有指定服务单元,它将分析所有服务单元。
    • 对于每个指定的服务单元,命令将检查其安全设置并提供详细的报告。
  2. 输出内容:

    • 输出包括每个服务单元的安全暴露评分,评分范围从 0 到 10。分数越低,表示服务越安全。
    • 输出还会显示每个服务的安全状态,例如“不安全”或“暴露”。
  3. 使用示例:

    • 基本使用方式是 systemd-analyze security [unit]​,其中 [unit]​ 是您想要分析的服务单元名称。
    • 例如,systemd-analyze security sshd.service​ 将分析 sshd​ 服务的安全性。
  4. 安全强化:

    • 这个命令可以帮助识别服务的潜在安全漏洞或弱点。
    • 根据命令的输出,您可以采取适当的措施来加强服务的安全性。
  5. 版本要求:

    • 这个安全审查工具是在 systemd 的版本 240 中添加的,发布于 2018 年 12 月。您需要运行这个版本或更高版本的 systemd 才能使用这个命令。

分析 nginx 服务的安全问题

Clip_2024-09-28_16-16-12

  • PrivateNetwork=​ - 服务可以访问主机的网络。这可能会增加安全风险,因为它可能允许服务与不受信任的网络进行通信。
  • User=/DynamicUser=​ - 服务以 root 用户身份运行。这是不推荐的做法,因为它会给服务过多的权限。
  • CapabilityBoundingSet=~CAP_SET(UID|GID|PCAP)​ - 服务可以更改 UID/GID 身份或捕获网络流量。
  • CapabilityBoundingSet=~CAP_SYS_ADMIN​ - 服务具有管理员权限,这是一个非常高的权限级别,可能会带来严重的安全风险。
  • CapabilityBoundingSet=~CAP_SYS_PTRACE​ - 服务具有调试能力,可以跟踪其他进程。

列表继续列出了服务所具有的各种权限和能力,每个权限旁边都有一个分数,表示它的安全暴露程度。这些权限包括但不限于网络配置、文件系统访问、系统调用权限等。
以下是一些关键点:

  • 表示服务缺少推荐的安全设置。
  • 表示服务已经实施了推荐的安全设置。

最后,命令给出了 nginx.service​ 的总体暴露级别为 9.6 UNSAFE 😨,这意味着服务存在多个安全问题,需要立即关注和解决。
为了提高服务的安全性,您应该考虑以下步骤:

  1. 限制网络访问:如果服务不需要访问外部网络,应该设置 PrivateNetwork=yes​。
  2. 运行非 root 用户:使用 User=​ 和 DynamicUser=​ 指令以非 root 用户身份运行服务。
  3. 限制能力集:使用 CapabilityBoundingSet=​ 来限制服务可以执行的系统调用。
  4. 应用沙箱设置:使用 ProtectSystem=​, ProtectHome=​, PrivateTmp=​ 等指令来增加服务的隔离性。
  5. 限制地址族:使用 RestrictAddressFamilies=​ 来限制服务可以使用的网络协议。

请根据服务的具体需求和安全要求来调整这些设置。在更改任何配置之前,请确保备份原始文件,并在安全的环境中测试更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GUI-Guider LVGL 添加自定义代码

添加自定义代码时,分为上线两端 1.上部分可有可无 2.下部分为你触发事件时调用的语句 具体集合下方图片 示例参考

运放模块的选型参数

增益带宽积-----尤其重要: GWB 增益*带宽 压摆率: 高带宽的运放一般都是电流型运放: 注意压摆率计算公式里面的Vopp参数是放大后的电压最大值: 参数,布局一定参考数据手册!!!&…

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

快速理解使用mq(二)——用户、虚拟HOST、Queue的创建

一、用户的创建 直接添加即可 二、虚拟Host创建 创建完成选择所属用户 点进去新建的host 管理对应权限 三、queue 创建 选择对应host 直接添加即可

系统分析师14:需求工程

1 内容概要 2 需求工程概述 需求工程:需求开发【含需求分析】和需求管理系统分析:软件需求分析、硬件需求分析、网络需求分析软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望考虑“做什么”,而不考虑“怎么做”&#xff0c…

2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点

云计算de小白 投资人工智能:平衡潜力与实用性 到 2025 年,人工智能将成为 IT 支出的重要驱动力,尤其是在生成式人工智能领域。人工智能的前景在于它有可能彻底改变业务流程、增强决策能力并开辟新的收入来源。然而,现实情况更加微…

4款工具搞定PDF去水印,线上+软件一应俱全!

作为一名文员,我每天都得和各种文档打交道,其中PDF文件是最常见的。有时候,我们收到的PDF文件会带有水印,这不仅影响了阅读体验,还可能在分享时造成不便。所以,学会如何去除PDF水印对我来说至关重要。今天&…

力扣 滑动窗口最大值

滑动窗口最大值 题目描述 题目分析 维护一个定长窗口的最大值,每当窗口滑动时都有一个新的元素进入和一个原有的元素离开。 比较简单的方法就是用一个优先队列维护窗口最大值 但是堆的计算成本时最坏时是 O ( n log ⁡ n ) O(n\log n) O(nlogn) 优化:…

uni-app在线预览pdf

这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹,将解压文件放进 pdf 文件…

面试加分必看,11道接口安全测试面试题!

今天,分享一些在面试中可能会遇到的接口安全测试面试问题,助你在面试中从容不迫。 01.HTTPS 与 HTTP 的区别? 02.OSI七层模型是指? 03.你所知道的 HTTP 状态码? 04.你知道SQL注入吗? 05.SQL 注入与XSS…

Xiaojie雷达之路---doa估计(dbf、capon、music算法)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,本篇文章主要是介绍一下雷达信号处理中的dbf、capon、music测角算法,一起来看看吧!!! 前言 本文从信号模型、dbf原理、capon原理、music原理以及代码仿真进行展开描述。 信号模型 阵列接收到…

c++与Python用笛卡尔的心形函数输出爱心

我突然想到输出爱心是否可以用笛卡尔的心形函数 在IDLE里用Python输出下面这个图形 在小熊猫c里用c输出下面这个图形 如果当你要输出这些的时候会怎么办 低级:纯输出 print( ********* ********* ***************** ***************** …

Github + Hexo + Shoka搭建个人博客以及遇到的部分问题

博客预览: 主页: 文章: 博客语言链接: 全部分类 |mmjon 不在能知,乃在能行 Shoka官方博客: Yume Shoka 優萌初華 有夢書架 (lostyu.me) 1、准备 1、github账号 :自行去github官网注册…

人生苦短,我用Python✌

面向代码的解释型语言 数据开发和AI 编程语言:让计算机了解我们干什么,翻译官 1.下载软件 解释器安装 点击第二个 改路径 D:\python 安装 测试 winr打开 输入代码 输出 退出环境 exit() 新建文本文档后缀改成py 编写 运行 安装编写代码…

MySQL 性能剖析全攻略

在使用 MySQL 数据库的过程中,性能问题往往是让开发者和管理员头疼的难题。为了有效地解决这些问题,我们需要对 MySQL 进行性能剖析。那么,如何在 MySQL 中进行性能剖析呢?本文将为你详细介绍。 一、为什么要进行性能剖析&#x…

$attrs 与 $listeners 怎么用

在组件 son、grandson 和 great-grandson 中都显示了 this is a sentence,而子组件 son 和孙组件 grandson 中都没有定义 props,说明 parent 组件中的数据正确的传递到了内部组件中。 打开控制台,分别点击组件 grandson 和 great-grandson 中…

用Python实现运筹学——Day 5: 单纯形法介绍

一、学习内容 1. 单纯形法的基本原理与步骤 单纯形法(Simplex Method)是求解线性规划问题的一种常用方法。它是一种迭代算法,用于在凸多边形的顶点上寻找目标函数的最优解,通常用于多变量的线性规划问题。单纯形法主要应用于线性…

如何查看上网记录及上网时间?5种按步操作的方法分享!【小白也能学会!】

“知己知彼,百战不殆”,在数字时代,了解自己的上网行为和时长,不仅能帮助我们更好地管理时间,还能提升工作效率和生活质量。 今天,我们就来分享五种简单易懂的方法,即便是网络小白也能轻松学会…

大模型分布式训练并行技术(九)-总结

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

基于Qt/C++UDP 调试软件功能及用途介绍

概述 UDP 调试软件是一个基于 Qt 框架的图形化应用程序,旨在提供一个简单易用的界面用于测试和调试 UDP(用户数据报协议)通信。该软件支持客户端和服务器模式,能够实现数据的发送和接收,方便开发者和网络工程师进行网…