Linux如何限制進程的CPU和內存使用?cgroups資源控制方法

要限制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資源控制方法

linux系統中,如果你需要限制某個進程的CPU和內存使用,避免它占用過多資源影響其他服務,cgroups(Control Groups) 是一個非常實用的工具。它可以對進程組進行資源分配和限制,包括CPU時間、內存大小、IO帶寬等。

Linux如何限制進程的CPU和內存使用?cgroups資源控制方法

下面介紹幾個常見的使用場景和方法,幫助你快速上手用cgroups來控制資源。

Linux如何限制進程的CPU和內存使用?cgroups資源控制方法


創建并配置cgroup目錄結構

cgroups通過虛擬文件系統掛載管理資源。現代Linux發行版通常已經默認掛載了/sys/fs/cgroup,你可以直接在這個路徑下創建自己的子組。

  1. 進入cgroups目錄:

    Linux如何限制進程的CPU和內存使用?cgroups資源控制方法

    cd /sys/fs/cgroup
  2. 創建一個新的cgroup(比如叫mygroup):

    mkdir mygroup
  3. 將進程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提供的是更細粒度的資源隔離手段,非常適合做容器、后臺任務調度或資源監控相關的工作。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享