Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux cgroups 基礎架構與操作入門

編輯:關於 Linux

cgroups(Control Groups)自 Linux 2.6.24 起引入核心,是輕量級虛擬化技術(如 LXC、Docker)的基石。它將進程分組,對每組資源(CPU、記憶體、I/O 等)進行限制、優先級分配、統計與隔離。本文梳理 cgroups 核心概念、檔案系統介面與常用操作指令。

子系統與掛載

每種資源對應一個子系統(subsystem),常見有 cpu、memory、blkio、cpuset、devices、freezer、net_cls 等。掛載方式:

mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu

建議各子系統獨立掛載目錄(如 /sys/fs/cgroup/cpu、/sys/fs/cgroup/memory),靈活性較高。查看已掛載:mount | awk '$5=="cgroup" {print $0}';查看所有子系統狀態:cat /proc/cgroups。

控制群組的階層結構

在子系統掛載點下建立目錄即建立控制群組(cgroup),例如 mkdir /sys/fs/cgroup/cpu/foo。新目錄會自動生成該子系統的配置檔。cgroup 支援多層巢狀結構,路徑代表群組身份;不同子系統下相同路徑對應同一邏輯群組,方便多資源協同控制。每個進程在單一子系統中只屬於一個 cgroup(預設為根群組)。

核心配置檔說明

以 /sys/fs/cgroup/cpu 為例,常見檔案:

  • cpu.cfs_period_us、cpu.cfs_quota_us:CFS 週期與配額
  • cpu.shares:相對權重
  • cpu.stat:統計資訊
  • tasks、cgroup.procs:成員管理(下文詳述)
  • notify_on_release、release_agent:釋放通知機制

進程加入與遷移

將進程加入群組:將 PID 寫入 tasks 檔(echo 5678 > /sys/fs/cgroup/cpu/foo/tasks)。tasks 顯示執行緒 ID(TID),寫入僅影響該執行緒及其子孫;cgroup.procs 顯示執行緒群組 ID(TGID,即常說的 PID),寫入會將整個進程所有執行緒移入。寫入非 TGID 時會自動轉換。進程加入後限制即時生效。查看進程所屬群組:cat /proc/<pid>/cgroup。移出群組:寫入根群組的 tasks。刪除群組:rmdir 目錄(需先清空進程與釋放資源)。

命令列工具

除了檔案系統介面,亦可使用 cgconfigparser、cgexec、lssubsys 等工具。例如 cgexec -g "cpu,blkio:/foo" bash 直接在指定群組啟動程式。文中附贈一個 Bash 版 cgexec 腳本,無需安裝套件即可使用。

權限委派

可修改群組目錄擁有者,讓非 root 使用者管理特定群組,實現權限最小化。

理解 cgroups 基礎架構是進階容器技術與資源治理的關鍵。建議從單一子系統實驗開始,逐步掌握多資源協同控制。

Copyright © Windows教程網 All Rights Reserved