当前位置: 首页 > news >正文

如何判断cgroup的版本?

在 Linux 系统中,判断当前使用的 cgroup 版本(v1 还是 v2)可以通过以下几种方法:

方法一:查看挂载点(最直接)

mount | grep cgroup
输出分析
  • cgroups v1:存在多个以 cgroup 开头的挂载点,每个挂载点对应一个子系统(如 cpumemory)。
    cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
    cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
    
  • cgroups v2:只有一个 cgroup2 挂载点,所有子系统统一管理。
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

方法二:检查 /sys/fs/cgroup 目录内容

ls /sys/fs/cgroup
输出分析
  • cgroups v1:目录下包含多个子目录,每个对应一个子系统(如 cpumemory)。
    blkio  cpu  cpuacct  cpuset  devices  freezer  memory  net_cls  net_prio  perf_event  pids  systemd
    
  • cgroups v2:目录下包含 cgroup.controllerscgroup.procs 等 v2 特有的文件。
    cgroup.controllers  cgroup.max.depth  cgroup.procs  cgroup.stat  ...
    

方法三:查看内核参数

检查内核是否启用了 unified_cgroup_hierarchy 参数:

cat /boot/cmdline.txt  # 适用于部分系统
# 或
cat /proc/cmdline
输出分析
  • cgroups v2:包含 systemd.unified_cgroup_hierarchy=1 或 unified_cgroup_hierarchy=1
  • cgroups v1:无此参数或值为 0

方法四:使用 lsb_release 或 hostnamectl(适用于部分系统)

lsb_release -a  # 查看发行版信息
hostnamectl   # 查看系统信息
版本对应关系
  • Ubuntu 20.04+CentOS 8+Fedora 31+ 默认使用 cgroups v2。
  • Ubuntu 18.04CentOS 7 默认使用 cgroups v1。

方法五:检查进程的 cgroup 文件(精确到进程)

cat /proc/$$/cgroup  # $$ 表示当前 shell 进程的 PID
输出分析
  • cgroups v1:每行以子系统名称开头(如 11:memory:/user.slice)。
  • cgroups v2:第一行包含 0::/ 或 0:name=systemd:/
    0::/user.slice/user-1000.slice/session-2.scope
    

方法六:使用 cgroup 命令行工具

# 尝试查看 cgroup v2 特有的控制器文件
cat /sys/fs/cgroup/cgroup.controllers# 如果输出类似以下内容,则为 v2:
# cpu io memory pids

总结

方法v1 特征v2 特征
mount多个 cgroup 挂载点单个 cgroup2 挂载点
/sys/fs/cgroup子目录对应各子系统包含 cgroup.controllers 文件
内核参数无 unified_cgroup_hierarchyunified_cgroup_hierarchy=1
/proc/$$/cgroup每行以子系统名称开头首行包含 0::/

注意事项

  1. 混合模式:部分系统可能启用了 hybrid 模式(v1 和 v2 共存),此时需根据实际挂载情况判断。
  2. 容器影响:容器内的 cgroup 视图可能与宿主机不同,需进入宿主机检查。
  3. 版本切换:若需从 v1 切换到 v2,需修改内核启动参数并重启系统。

通过以上方法,可准确判断系统当前使用的 cgroup 版本,为容器部署和资源管理提供基础依据。

相关文章:

  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.3 数据脱敏与安全(模糊处理/掩码技术)
  • SpringBoot实战:整合Knife4j
  • 前端懒加载(Lazy Loading)实战指南
  • 开元类双端互动组件部署实战全流程教程(第3部分:UI资源加载机制与界面逻辑全面解析
  • 金仓数据库 KingbaseES 在电商平台数据库迁移与运维中深入复现剖析
  • C++和Lua混和调用
  • 编译原理期末重点-个人总结——2 文法与语言
  • 相同IP和端口的服务器ssh连接时出现异常
  • 36-校园反诈系统(小程序)
  • JS DAY4 日期对象与节点
  • JAVA简单走进AI世界~Spring AI
  • Ubuntu K8S(1.28.2) 节点/etc/kubernetes/manifests 不存在
  • 二、【LLaMA-Factory实战】数据工程全流程:从格式规范到高质量数据集构建
  • 虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅
  • springboot+mysql+element-plus+vue完整实现汽车租赁系统
  • Vue3携手Echarts,打造炫酷数据可视化大屏
  • Flutter——数据库Drift开发详细教程(四)
  • GZ人博会自然资源系统(测绘)备考笔记
  • 享元模式(Flyweight Pattern)详解
  • 小米刷新率 2.4 | 突破屏幕刷新率限制,享受更流畅视觉体验的应用程序
  • 金正恩视察重要军工企业要求推进武力强化变革
  • 国新办将于5月8日10时就《民营经济促进法》有关情况举行新闻发布会
  • 云南昆磨高速发生交通事故致3辆车起火,昆明消防:幸无人员伤亡
  • 五一假期上海两大机场客流量超193万人次,创历年同期最高
  • 李公明 | 一周画记:生活就是抵抗
  • G40迎来返程大车流,今明两日预计超13万辆车经长江隧桥进沪