systemd --user进程CPU占用高问题分析

2023-05-16

原文链接:https://www.cnblogs.com/yaohong/p/16046670.html,转载需经同意。

1.问题由来

近期发现堡垒机环境有如下问题,systemd占用大量cpu:

2.问题定位

2.1.什么是systemd

咋们可以先从systemd这个进程入手分析这个问题:
根据文档《systemd (简体中文)》文档,我们可知如下图信息:
作用:

systemd 会给每个用户生成一个 systemd 实例,用户可以在这个实例下管理服务,启动、停止、启用以及禁用他们自己的单元。

工作原理:

“从 systemd 226 版本开始,/etc/pam.d/system-login 默认配置中的 pam_systemd 模块会在用户首次登录的时候, 自动运行一个 systemd --user 实例。 只要用户还有会话存在,这个进程就不会退出;用户所有会话退出时,进程将会被销毁。”。

根据上面这段话,我们可以猜测:ssh登录时可以创建systemd进程,ssh退出登录时可以销毁systemd --user进程。

怀着这个猜测,我们进行下面的研究分析。

2.2.systemd进程怎么产生的

首先,我们在第一个终端,执行下面的命令创建test3用户:

$ groupadd test3
$ useradd -g test3 -m -d /home/test3 -s /bin/bash test3
$ passwd test3

然后,在第二个终端,执行ssh登录test3

$ ssh test3@172.21.0.46

接着,在第一个终端,执行如下命令过滤新产生的test3 用户的systemd进程

$ top -bc |grep systemd

得到如下图回显,可知:1.9秒前产生了一个pid为19178的systemd --user进程,此进程占用了40.9%的CPU。

image.png

于是对接systemd进程创建得出如下结论:systemd版本大于226(centos7为219、ubuntu1604为229),ssh 登录会产生登录用户对应的systemd进程。

2.3.systemd进程为何没有被销毁

既然ssh登录会产生systemd进程,那退出ssh登录应该会销毁对应systemd进程。
于是,我们在2.2中的第二个窗口执行 exit退出ssh连接。

$ exit

 然后,再执行如下命令,发现没有test3用户的systemd进程了。

$ top -bc | grep systemd

至此,我们对systemd进程的退出也有了了解:退出ssh连接即可销毁对应systemd进程
但,为什么我们看到的腾讯云环境上systemd进程一直没有被销毁?

 此时我想到了 非正常退出ssh连接

如2.1章节,在第二个终端,执行ssh登录test3,再如下图直接点“X”直接关闭窗口,

然后,在第一个终端,执行如下命令过滤新产生的test3 用户的systemd进程

$ top -bc |grep systemd

test3用户的systemd进程还存在,惊讶!!!
于是分别做如下操作对systemd进程关闭做测试,并得出相应结论:

  • 1.xshell连内部vmware上虚拟机环境,点“X”号关闭窗口,对应systemd进程正常销毁;
  • 2.web端连公司堡垒机上的云主机环境,点“X”号关闭窗口,对应systemd进程不能被销毁;
  • 3.web端通过部门内部运维平台连接内部虚拟机环境,点“X”号关闭窗口,对应systemd进程不能被销毁;

于是对于systemd进程销毁得出如下结论:web端连接的虚拟机终端,直接点“X”号关闭窗口,登录用户对应的systemd进程都不能被销毁,exit命令退出终端登录可以销毁,Xshell无此问题。

2.4.systemd进程吃CPU的原因

关于进程跟踪我们很容易想到strace命令。
我们对2.1章节中创建的test3的systemd进程进行跟踪。

image.png

得到如下回显:

 看这个进程是在不停的扫描磁盘。

关于这个问题,我在《google-cloud-kuberbetes-run-away-systemd-100-cpu-usage》一文中得到答案:

image.png

Docker在17.03和18.09版本之间的变化导致了大量的systemd活动,无论在pod中执行了什么。同时,只要runc发生change,它导致所有mount units被重新加载,作为执行存活探针的一部分。
于是针对这个猜想,我看了下k8s同一集群中systemd正常与异常的节点:
1.正常节点:

# cat /proc/mounts |wc
  120     720   46377

2.异常节点:

# cat /proc/mounts |wc
  1017    6102  341121

于是瞬间也有了结论:systemd 进程cpu使用率太高是因为mount挂载点太多,mount有更新后,通过dbus通知到systemd重新遍历所有mount, 遍历操作比较耗cpu。
同时,既然说到和docker版本有关系,我便针对性找了两个有差异的环境做docker版本对不:

    • 1.ubuntu1604+mount挂载多+systemd正常环境

  • 2.ubuntu1604+mount挂载多+systemd异常环境 

由上图我们发行,环境1中mount挂载为1537个,比环境2中mount挂载为1028个更高但是没出现systemd吃cpu问题,可知系统相同情况下和docker版本有关。

对于什么情况下出现systemd占用高,我们得出如下结论:systemd版本大于226(ubuntu1604为229)+docker版本为19.03.14,无论runc做了什么操作,dbus会通知systemd重新遍历 mount,遍历mout过多(cat /proc/mounts |wc命令查看)会导致systemd进程吃CPU。

三、解决方案

1.不使用web终端连接systemd版本大于226,docker>=19.03.14的环境,可以使用比如xshell连接。
2.针对runc活动导致systemd进程吃CPU问题,google GKE 团队给出如下优化方案:

image.png

 原文链接:https://www.cnblogs.com/yaohong/p/16046670.html

四、总结

1.systemd进程如何被创建:systemd版本大于226(centos7为219、ubuntu1604为229),ssh 登录会产生登录用户对应的systemd --user进程。2.systemd进程为何未被销毁:web端连接的虚拟机终端,直接点“X”号关闭窗口,登录用户对应的systemd进程都不能被销毁,exit命令退出终端登录可以销毁,Xshell无此问题。3.systemd进程为何吃cpu:systemd版本大于226(ubuntu1604为229)+docker版本为19.03.14,无论runc做了什么操作,dbus会通知systemd重新遍历 mount,如果遍历mount过多(cat /proc/mounts |wc命令查看,700个会吃30%CPU,1000个会吃50%左右CPU)就会导致systemd进程吃CPU。

 原文链接:https://www.cnblogs.com/yaohong/p/16046670.html

五、参考文档

《systemd (简体中文)》
《google-cloud-kuberbetes-run-away-systemd-100-cpu-usage》

《 原文链接:https://www.cnblogs.com/yaohong/p/16046670.html》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

systemd --user进程CPU占用高问题分析 的相关文章

  • springboot 项目访问controller没有进入拦截器

    在项目中新写了一个校验token是否存在的拦截器之后 xff0c 编译和启动都没有问题 直到访问方法的时候发现并没有进入这个拦截器 后来发现是因为springboot在启动之后 xff0c 启动类只会扫描启动类所在的包下的方法 解决方法就是
  • leetcode 1170. 比较字符串最小字母出现频次(C++)

    我们来定义一个函数 f s xff0c 其中传入参数 s 是一个非空字符串 xff1b 该函数的功能是统计 s 中 xff08 按字典序比较 xff09 最小字母的出现频次 例如 xff0c 若 s 61 34 dcce 34 xff0c
  • maven私库nexus2.11.4迁移升级到nexus3.12.0

    https www cnblogs com liangyou666 p 9439755 html nexus简介 nexus是一个强大的maven仓库管理器 它极大的简化了本地内部仓库的维护和外部仓库的访问 nexus是一套开箱即用的系统不
  • Linux安装JDK8详细图文教程

    第一步 获取JDK文件 JDK下载包 xff1a 直接进入 如果跳转登录页面 xff0c 注册一个账号登录即可 登录过后文件就下载完成 第二步 上传JDK到服务器 1 创建JDK目录 span class token function mk
  • 购物商城shopping连载(11)

    订单模块类创建及配置 购物完成之后 xff0c 提交订单 xff0c 生成一个订单 订单表和商品的关系 xff1a 订单和商品的关系是多对多 xff0c 一个订单可以有多个商品 xff0c 一个商品可以属于多个订单 如果是多对多的关系 xf
  • CSS面试题:20道含答案和代码示例的练习题

    如何水平居中一个元素 xff1f 答案 xff1a 可以使用text align属性设置父元素的文本对齐方式为center xff0c 也可以使用margin属性设置元素的左右margin为auto 如何垂直居中一个元素 xff1f 答案
  • Ubuntu GNOME去除顶栏和窗口标题栏方法(亲测可用)

    一 环境 Ubuntu16 04 43 gnome3 gome shell 3 18 5 二 简介 因项目需要 xff0c 软件在 Ubuntu 系统中运行 xff0c 并且全屏显示 而在 Ubuntu 系统中 xff0c 侧边栏的自动隐藏
  • linux 配置FTP多个虚拟用户,私人目录+共享目录

    需求 xff1a 公司多个部门 xff0c 行政 xff0c 财务 xff0c 人事 xff0c 运营 xff0c 每个部门都能上传下载文件 xff0c pub目录是共享目录 xff0c 每个部门都可以上传下载 xff0c 但是无法删除 每
  • Java8新特性详解

    陈老老老板 说明 xff1a 新的专栏 xff0c 本专栏专门讲Java8新特性 xff0c 把平时遇到的问题与Java8的写法进行总结 xff0c 需要注意的地方都标红了 xff0c 一起加油 本文是介绍Java8新特性与常用方法 xff
  • java 基础 matches()方法的作用

    java lang包中的String类 xff0c java util regex包中的Pattern xff0c Matcher类中都有matches 方法 都与正则表达式有关 下面我分别举例 xff1a xff08 字符串 xff1a
  • 什么是建造者模式?

    为什么会有这个模式 xff1f 很多时候我们会构建非常复杂的类 xff0c 内部初始化构成需要进行很多复杂交互操作 xff0c 比如需要去数据库查询数据后作为属性初始值 xff0c 或者说我们想控制它的内部初始化的过程 xff0c 将构建过
  • Android Stdio引入kotlin-android-extensions插件

    在Activity中使用Toast lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt LinearLayout xmlns android 61 34 http schema
  • 微信小程序开发(一)

    微信小程序开发 目录 微信小程序开发 一 微信小程序开发 二 五 让小程序连接树莓派 六 xff1a 小程序控制面板设计 七 xff1a 树莓派如何解析小程序的信息 八 xff1a 树莓派如何回信息给小程序 九 xff1a 树莓派与微信小程
  • pancakeswap薄饼添加流动性后实现永久锁仓

    pancakeswap xff08 薄饼 xff09 添加流动性后永久锁仓的目的是彻底放弃对资金池的控制权限 xff0c 永久不能撤池 主要针对项目方在首次完成流动性的添加后 xff0c 永久锁仓 这样就放弃了对流动性的所有权 xff0c
  • GEO芯片数据探针id转化

    以数据集GSE89657为例 xff0c 芯片平台是GPL6244 1 下载表达谱数据 GEO网站手动下载表达谱数据 xff0c 解压 xff0c 去注释 gunzip GSE89657 series matrix txt gz cat G
  • R语言正态分布

    统计分布每一种分布有四个函数 xff1a d density xff08 密度函数 xff09 xff0c p 分布函数 xff0c q 分位数函数 xff0c r 随机数函数 正态曲线呈钟型 xff0c 两头低 xff0c 中间高 xff
  • R语言均匀分布

    在R中 xff0c unif是用来进行均匀分布分析的 xff0c 在其前面加上不同的前缀表示不同的函数 xff0c 各函数的使用格式如下所示 xff1a dunif x min 61 0 max 61 1 log 61 FALSE 分布密度
  • 转录本counts,FPKM,TPM相互转化

    FPKM Fragments Per Kilobase of exon model per Million mapped fragments 每千个碱基的转录每百万映射读取的fragments FPKM xff1a Fragments pe
  • R语言泊松(Poisson)分布

    Poisson分布 xff0c 是一种统计与概率学里常见到的离散概率分布 xff0c 由法国数学家西莫恩 德尼 泊松 xff08 Sim on Denis Poisson xff09 在1838年时发表 泊松分布的参数 是单位时间 或单位面
  • windows软件窗口或者对话框太大超出屏幕解决办法

    软件窗口太大显示不全 问题 xff1a 软件窗口或对话框太大 xff0c 最大化也无法显示全部 xff0c 拖动标题栏移动到屏幕顶部 xff0c 底部也显示不出来 具体见下面两张图片 解决方法 xff1a 使用第三方工具 xff1a 窗口移

随机推荐

  • R语言卡方(chisq)分布

    若n个相互独立的随机变量 xff0c xff0c n xff0c 均服从标准正态分布 xff08 也称独立同分布于标准正态分布 xff09 xff0c 则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量 xff0c 其分布规律称为
  • liftOver进行基因组坐标转换

    Liftover是UCSC中用于基因组版本之间转换的一个工具 xff0c 既可以做某一物种内基因组版本的转换 xff0c 还可以做物种间基因组版本的转换 1 网页转换 http genome ucsc edu cgi bin hgLiftO
  • R语言ggraph包绘制环状网络图

    ggraph 是 ggplot2 的扩展 xff0c 用于绘制关系型数据结构 xff0c 如网络 图和树等 ggraph 包含 3 个核心概念 xff1a layout xff1a 定义图的布局 xff0c 如蜂巢图 圆堆积图等 nodes
  • 本地安装运行HiC数据可视化容器higlass-docker

    HiGlass xff0c 这是一个基于web技术的开源可视化工具 xff0c 它提供了一个丰富的界面 xff0c 用于快速 多重和多尺度导航2D基因组地图以及1D基因组轨迹 xff0c 允许用户组合各种数据类型 xff0c 同步多个可视化
  • R语言p值校正函数p.adjust

    调整方法包括Bonferroni校正 xff08 Bonferrroni xff09 xff0c 其中p值乘以比较次数 Holm xff08 1979 xff09 xff08 Holm xff09 Hochberg xff08 1988 x
  • R语言中Lasso Cox 筛选生存相关特征

    构建预后模型时 xff0c 通常先进行单因素Cox分析筛选出关联的变量 xff0c 再通过Lasso Cox 筛选生存相关特征 xff08 排除多重共线性的特征 xff09 xff0c 最后构建Cox多因素回归模型分析预后影响 Lasso
  • R包WGCNA分析代码

    WGCNA xff08 加权基因共表达网络分析 xff09 R软件包 xff0c 用于执行加权相关网络分析 xff0c 包括网络构建 模块检测 基因选择 拓扑结构计算 数据模拟 可视化以及与外部软件的接口等功能 WGCNA旨在寻找协同表达的
  • 单样本GSEA分析肿瘤组织免疫浸润

    单样本GSEA分析即ssGSEA xff0c 可以计算肿瘤组织中免疫细胞的比例 xff0c 从而量化免疫浸润 ssGSEA可以用R 当中的GSVA包来计算 1 下载 xff0c 读入免疫细胞特征基因集 http cis hku hk TIS
  • 如何进行服务器选型

    1 服务器要运行什么应用 Web服务器对硬件要求不高 xff0c 一般的硬件配置即可满足需求 xff0c 如果后期Web服务访问量上升 xff0c 只需要新增同等配置的服务器 xff0c 通过负载均衡进行集群 xff0c 即可实现Web服务
  • 约瑟夫环问题总结

    问题简介 xff1a 约瑟夫环 xff08 约瑟夫问题 xff09 是一个数学的应用问题 xff1a 已知n个人 xff08 以编号1 xff0c 2 xff0c 3 n分别表示 xff09 围坐在一张圆桌周围 从编号为k的人开始报数 xf
  • 文件夹重命名(或移动)却找不到指定该文件类型咋办?

    文件夹重命名 或移动 却找不到指定该文件类型咋办 xff1f 方法一 xff0c 导入FolderDescriptions reg 64位系统导入 xff1a FolderDescriptions x64 reg 32位系统导入 xff1a
  • ubuntu 18.04忘记登录密码的破解方法

    参考 xff1a https www linuxrumen com rmxx 889 html
  • Android 解决Toast不显示

    没有调用show方法 例如 xff1a Toast makeText MainActivity this 休眠 Toast LENGTH SHORT show
  • LwIP之TCP Server多client连接发送和接收Demo

    msh调用时对端口进行监听 xff0c 监听到有客户端连接时 xff0c 创建新的线程进行连接 监听时设置最大连接数为4 xff0c 使用SocketTool工具模拟client连接 xff0c 实际效果如下 span class toke
  • Manjaro配置攻略

    1 概述 本文主要讲述了新安装的Manjaro一些常用的配置 xff0c 包括源 常用软件 快捷键 终端以及一些效率工具的配置 2 pacman源 首先是pacman源的选择 xff1a span class token function
  • 真 ● 禁秘技 ● 奥义 ● 终端美化

    1 概述 作为一个程序员 xff0c 可以没钱 xff0c 没车 xff0c 没房 xff0c 没老婆 xff0c 没女朋友 但是 xff0c 一定要有一个漂亮骚气的终端 没错 xff0c 大骚特骚 说什么大实话 先来看看原生的终端 xff
  • NFS网络文件共享服务

    NFS用来做什么 以下说明节选自 xff0c 老男孩相关书籍 xff1a 在企业集群架构的工作场景中 xff0c NFS网络文件系统一般被用来存储共享视频 图片 附件等静态资源文件 xff0c 通常网站用户上传的文件都会放到NFS共享里 x
  • mariadb数据库基本使用

    mariadb数据库简介 自甲骨文公司收购MySQL后 xff0c 其在商业数据库与开源数据库领域市场的占有份额都跃居第一 xff0c 这样的格局引起了业内很多的人士的担忧 xff0c 因为商业数据库的老大有可能将MySQL闭源 为了避免O
  • Ubuntu-常见问题

    执行 sudo apt get update 报错 E Problem executing scripts APT Update Post Invoke Success 39 if usr bin test w var cache app
  • systemd --user进程CPU占用高问题分析

    原文链接 xff1a https www cnblogs com yaohong p 16046670 html xff0c 转载需经同意 1 问题由来 近期发现堡垒机环境有如下问题 xff0c systemd占用大量cpu xff1a 2