要限制linux中進程的cpu和內存使用,可使用cgroups工具。1. 創建cgroup目錄并綁定進程;2. 通過設置cpu.cfs_period_us和cpu.cfs_quota_us限制cpu使用率,如設為50%;3. 使用memory.limit_in_bytes限制內存上限,并可啟用oom控制;4. 可同時掛載多控制器以實現cpu與內存的聯合限制,提供更靈活的資源管理方式。
在linux系統中,如果你需要限制某個進程的CPU和內存使用,避免它占用過多資源影響其他服務,cgroups(Control Groups) 是一個非常實用的工具。它可以對進程組進行資源分配和限制,包括CPU時間、內存大小、IO帶寬等。
下面介紹幾個常見的使用場景和方法,幫助你快速上手用cgroups來控制資源。
創建并配置cgroup目錄結構
cgroups通過虛擬文件系統掛載管理資源。現代Linux發行版通常已經默認掛載了/sys/fs/cgroup,你可以直接在這個路徑下創建自己的子組。
-
進入cgroups目錄:
cd /sys/fs/cgroup
-
創建一個新的cgroup(比如叫mygroup):
mkdir mygroup
-
將進程PID寫入該組的任務列表:
echo 1234 > mygroup/tasks
其中1234是你想限制的進程ID。
這個步驟只是基礎設置,接下來你就可以根據需要設定具體的資源限制了。
限制CPU使用率
要限制進程使用的CPU時間,可以通過cpu控制器下的cpu.cfs_quota_us和cpu.cfs_period_us兩個參數配合使用。
- cpu.cfs_period_us:定義周期長度(單位是微秒),例如100000表示100毫秒。
- cpu.cfs_quota_us:定義在這個周期內允許運行的時間,比如50000表示最多運行50毫秒。
舉個例子,如果你想讓進程最多使用半個CPU(50%):
echo 100000 > mygroup/cpu.cfs_period_us echo 50000 > mygroup/cpu.cfs_quota_us
這樣,該進程在一個周期內只能運行一半時間,相當于限制了最大CPU使用率為50%。
注意:如果值大于cfs_period_us,則不限制CPU使用。
限制內存使用上限
限制內存主要使用memory控制器下的memory.limit_in_bytes文件。
例如,限制進程最多使用200MB內存:
echo 200M > mygroup/memory.limit_in_bytes
還可以同時啟用OOM(Out of Memory)控制:
echo 1 > mygroup/memory.oom_control
當內存超過限制時,系統會嘗試終止該組中的進程。
建議在測試環境先驗證內存限制效果,避免生產環境中誤殺關鍵進程。
多個資源同時限制的小技巧
實際使用中,你可能希望同時限制多個資源,比如CPU+內存,這時候可以將多個控制器綁定到同一個cgroup中。
-
掛載多控制器方式(可選):
mount -t cgroup -o cpu,memory none /sys/fs/cgroup/cmgroup
-
然后像前面一樣設置cpu.cfs_quota_us和memory.limit_in_bytes即可。
這種方式適合你想集中管理一組進程的資源使用情況。
基本上就這些操作了。雖然看起來有點命令行繁瑣,但一旦熟悉了流程,就能靈活控制資源使用。相比全局修改系統配置,cgroups提供的是更細粒度的資源隔離手段,非常適合做容器、后臺任務調度或資源監控相關的工作。