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 管理 CPU 資源完整指南

編輯:關於 Linux

在 Linux 系統中,cgroups(控制群組)是限制、監控與隔離進程資源使用的核心機制。本文將詳細說明如何透過 cgroups 的 cpu 子系統,精準控制進程的 CPU 使用率,避免單一程式佔用過多資源導致系統無回應。

核心參數:cfs_period_us 與 cfs_quota_us

cgroups 使用 cpu.cfs_period_us(週期,預設 100,000 微秒 = 100ms)與 cpu.cfs_quota_us(配額,預設 -1 代表無限制)兩個參數,配合完全公平排程器(CFS)來限制單位時間內的 CPU 使用時間。配額佔週期的比例即為該控制群組可使用的 CPU 百分比。

實戰示範:將 Python 耗 CPU 程序限制在 50%

首先啟動一個佔滿 CPU 的測試程序:

# echo 'while True: pass' | python &
[1] 1532

使用 top 觀察,該進程(PID 1532)佔用 99.6% CPU。接著建立控制群組 /foo 並設定配額:

echo 50000 > /sys/fs/cgroup/cpu/foo/cpu.cfs_quota_us
echo 1532 > /sys/fs/cgroup/cpu/foo/tasks

此時 cpu.cfs_quota_us 設為 50,000,佔週期 100,000 的 50%。再次執行 top,該進程 CPU 使用率即降至約 50%。注意:單核心環境下數值對應直觀;多核心時,配額可超過週期(最多 n 核 × 週期)。

層級限制與即時排程參數

子群組的資源設定受父群組限制:cpu.cfs_period_us 不得小於父層,cpu.cfs_quota_us 不得大於父層。另有 cpu.rt_period_us、cpu.rt_runtime_us 用於即時進程限制,一般較少使用。

統計資訊:cpu.stat

cpu.stat 提供 nr_periods(總週期)、nr_throttled(被節流週期)、throttled_time(被限制的總 CPU 時間),可作為資源使用監控依據。

相對權重分配:cpu.shares

cpu.shares 採相對權重方式分配 CPU,而非硬性限制。例如根群組 1024、/foo 2048,當兩組皆滿載時,/foo 可獲得雙倍 CPU 時間。若其他群組閒置,單一群組仍可跑滿全部 CPU,資源利用率較高。

核心綁定:cpuset 子系統

透過 cpuset.cpus、cpuset.mems 可限定進程可使用的 CPU 核心與記憶體節點(支援 0,1,2 或 0-3 範圍格式)。啟用前必須同時設定兩者且相容,否則會報錯。驗證方式:cat /proc/<pid>/status | grep '_allowed_list'。

CPU 使用量統計:cpuacct 子系統

cpuacct.stat 記錄用戶態/核心態 CPU 時間(單位 jiffies,通常 100 Hz);cpuacct.usage 與 cpuacct.usage_percpu 以奈秒為單位統計總 CPU 消耗,適合雲端計費場景。

注意事項:SLES 11 特殊行為

在 SLES 11 SP2/SP3(核心 3.0.x)中,寫入 cgroup.procs 不生效,必須寫入 tasks;其他核心版本未發現此問題。

掌握 cgroups CPU 控制技巧,能有效防止資源爭搶,保障關鍵服務穩定運行。建議在測試環境驗證參數後再套用至生產系統。

Copyright © Windows教程網 All Rights Reserved