Ubuntu Overlay資源限制的核心方法:結合cgroups(控制組)
Overlay文件系統本身不具備直接限制CPU、內存等資源的能力,需通過Linux內核的**cgroups(控制組)**功能實現資源管控。cgroups通過將進程分組并設置資源配額,間接限制Overlay文件系統相關進程的資源使用。
在Ubuntu上,需先安裝cgroup-tools
包以管理cgroups:
sudo apt-get update
sudo apt-get install cgroup-tools
以限制內存使用為例,步驟如下:
cgcreate
命令創建名為myoverlay
的內存cgroup:sudo cgcreate -g memory:/myoverlay
memory.limit_in_bytes
文件寫入限制值(單位:字節)。例如,限制為512MB:echo $((512 * 1024 * 1024)) | sudo tee /sys/fs/cgroup/memory/myoverlay/memory.limit_in_bytes
若需限制CPU資源(如1個CPU核心),可修改cpu.cfs_quota_us
和cpu.cfs_period_us
:echo 100000 | sudo tee /sys/fs/cgroup/cpu/myoverlay/cpu.cfs_quota_us # 1個核心=100000微秒(周期為100000微秒)
echo 100000 | sudo tee /sys/fs/cgroup/cpu/myoverlay/cpu.cfs_period_us
需獲取Overlay進程的PID(進程ID),然后將其添加到cgroup中:
ps
或pgrep
命令查找Overlay進程(如overlayfs
或容器進程)。例如:ps aux | grep overlayfs
cgclassify
命令將進程加入myoverlay
組:sudo cgclassify -g memory,cpu:myoverlay <PID>
若為Docker容器,可通過容器ID批量添加所有進程:sudo cgclassify -g memory,cpu:myoverlay $(docker inspect -f '{{.State.Pid}}' <容器ID>)
cgget
命令確認限制是否設置成功:sudo cgget -g memory,cpu:/myoverlay
top
、htop
或docker stats
(若為Docker容器)查看資源占用,確認未超過設定上限。若使用Docker的overlay2
存儲驅動,可直接在運行容器時通過參數限制資源:
docker run -it --storage-driver=overlay2 -m 512m ubuntu:latest /bin/bash
docker run -it --storage-driver=overlay2 --cpus="1" ubuntu:latest /bin/bash
此方式會自動創建cgroup并應用限制,無需手動操作。