首页
/ Sysbox容器中高CPU占用问题的分析与解决

Sysbox容器中高CPU占用问题的分析与解决

2025-06-26 07:05:18作者:段琳惟

问题背景

Sysbox是一款用于运行系统级工作负载的容器运行时,它通过特殊的虚拟化技术使容器能够像虚拟机一样运行系统服务。近期用户报告在使用Sysbox运行容器时出现sysbox-fs进程CPU占用率异常升高的问题,特别是在容器中挂载GPU设备(如/dev/dri/renderD128)时更为明显。

问题现象

当用户在Sysbox容器中挂载设备文件时,系统日志中会出现大量重复的umount调用记录,主要针对/run/systemd/mount-rootfs/sys/devices/virtual路径。这些调用形成了一个无限循环,导致sysbox-fs进程持续消耗大量CPU资源。

日志示例显示sysbox-fs不断收到并忽略针对该路径的卸载请求:

Received umount syscall from pid 1098145
target: /run/systemd/mount-rootfs/sys/devices/virtual
Ignoring unmount of sysbox-fs managed submount at /run/systemd/mount-rootfs/sys/devices/virtual

根本原因分析

经过深入调查,发现问题源于以下几个关键因素:

  1. 系统服务冲突:容器内的e2scrub_reap.service和e2scrub_all.timer服务会定期执行文件系统检查,这些服务在容器环境中是不必要的,因为它们通常由宿主机执行。

  2. mount命名空间处理:Sysbox会拦截容器内的mount和umount系统调用。当系统尝试卸载sysbox-fs管理的挂载点时(如/sys/devices/virtual),Sysbox出于安全考虑会阻止这些操作,导致调用方不断重试。

  3. 递归绑定挂载问题:systemd服务会将容器的根文件系统递归绑定挂载到/run/systemd/mount-rootfs/,然后尝试卸载其中的虚拟设备目录,而Sysbox错误地将这些卸载请求识别为对原始sysbox-fs挂载点的操作。

解决方案

Sysbox开发团队提供了多层次的解决方案:

  1. 临时解决方案

    • 在容器内禁用e2scrub相关服务:
      systemctl stop e2scrub_reap.service
      systemctl disable e2scrub_reap.service e2scrub_all.timer
      
    • 重启sysbox-fs服务可以暂时缓解问题
  2. 长期修复

    • Sysbox团队在代码库中修复了挂载点识别逻辑,确保只保护原始sysbox-fs挂载点,而允许对绑定挂载副本的操作
    • 该修复已合并到主分支,将在v0.6.5版本中发布
  3. 最佳实践

    • 对于基于Ubuntu Noble的Sysbox容器镜像,官方已更新镜像默认禁用这些服务
    • 用户自定义镜像时应评估容器内运行的服务必要性,禁用容器环境不需要的系统服务

技术细节

Sysbox通过以下机制实现安全隔离:

  1. syscall拦截:使用seccomp过滤器和ptrace拦截容器内的mount/umount调用
  2. 虚拟文件系统:sysbox-fs为/proc/sys中的特定路径提供虚拟化视图
  3. 挂载点保护:防止容器进程卸载关键虚拟文件系统挂载点

在修复中,开发团队改进了挂载点识别算法,现在能够正确区分:

  • 原始sysbox-fs管理的挂载点(需要保护)
  • 用户创建的绑定挂载副本(可以安全卸载)

影响评估

该问题主要影响以下场景:

  1. 使用systemd作为init系统的容器
  2. 容器中挂载额外设备文件的场景
  3. 运行文件系统检查等系统服务的容器环境

对于大多数轻量级容器工作负载,可能不会触发此问题。但对于需要完整系统环境的容器(如运行Kubernetes节点、CI/CD构建环境等),此问题更为常见。

结论

Sysbox容器中的高CPU占用问题展示了容器运行时与系统服务交互时的复杂性。通过深入分析系统调用拦截、挂载命名空间管理等底层机制,Sysbox团队不仅解决了当前问题,还增强了运行时对复杂场景的处理能力。

对于用户而言,理解容器与虚拟机的差异、合理配置容器内服务是避免类似问题的关键。Sysbox的持续改进也体现了开源项目对用户反馈的快速响应能力,使其成为运行系统级容器工作负载的可靠选择。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
144
1.92 K
kernelkernel
deepin linux kernel
C
22
6
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
274
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
930
553
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
422
392
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
189
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
75
65
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
344
1.3 K
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
36
8