Ghi chép lại quá trình tìm hiểu Docker
Control group hay cgroup được giới thiệu từ phiên bản Linux kernel 2.6.24, cho phép Linux giới hạn tài nguyên cho các tiến trình trong hệ thông như cpu, memory, băng thông mạng. Do dó có thể tối ưu hiệu năng của hệ thống.
Trong cgoups, Các tài nguyên được quản lý được gọi là subsystem và các tiến trình được quản lý được gọi là các task.
Các subsystem phỏ biến của cgroup:
cpu
: sử dụng OS scheduler để cấp phát CPU cho các “task”.cpuacct
: báo cáo về trình trạng sử dụng CPU của các “task”.cpuset
: quy định cpu cho các task trong hệ thống nhiều cpu.memory
: giới hạn sử dụng bộ nhớ trên hệ thống.blkio
: giới hạn việc truy cập nhập/xuất(I/O) đến các thiết bị như ổ đĩa cứng.net_prio
: giới hạn băng thông mạng theo độ ưu tiên.pids
: giới hạn số lượng process được tạoĐể giới hạn tài nguyên cho các container, thêm tùy chọn cho container khi chạy lệnh docker run
docker info
.
WARNING: No swap limit support
/etc/default/grub
, sửa hoặc thêm dòng GRUB_CMDLINE_LINUX
với hai cặp giá trị sau:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
lưu file.
sudo update-grub
Trong Linux, khi hệ thống phát hiện không đủ mem để thực hiện các chương trình quan trọng, nó sẽ thực hiện kill các tiến trình khác để giải phóng bộ nhớ. Các tiến trình bị kill có thể là docker, các container, các ứng dụng,… -> Đây là hiện tượng Out Of Memory (OOM)
Hard limmit
: Cho phép container sử dụng không quá một lượng bộ nhớ người dùng hay hệ thống.Soft limmit
: Cho phép container có thể sử dụng số lượng bộ nhớ theo nhu cầu của nó trừ khi một điều kiện nào đó thỏa mãn, ví dụ khi kernel phát hiện bộ nhớ thấp trên host.b
, k
, m
, g
để xác định bytes, kilobytes, megabytes, or gigabytes.Tùy chọn | Mô tả |
---|---|
-m hoặc --memory= |
Số lượng bộ nhớ tối đa container có thể sử dụng. Tối thiểu là 4m |
--memory-swap |
Dung lượng bộ nhớ swap cấp cho container. |
--memory-swappiness |
Cấu hình swapiness cho container |
--memory-reservation |
Cho phép bạn chỉ định soft limit nhỏ hơn --memory , nó được kích hoạt khi Docker phát hiện sự tranh chấp hoặc bộ nhớ thấp trên máy chủ. Nếu bạn sử dụng --memory-reservation , giá trị này phải được set thấp hơn --memory để nó được ưu tiên. Bởi vì nó là 1 soft limit, nó không đảm bảo rằng container không vượt quá giới hạn. |
--kernel-memory |
Dung lượng tối đa của kernel memory mà 1 container có thể sử dụng. Giá trị min cho phép: 4m. Do kernel memory không thể sử dụng bộ nhớ swap, nên nếu kernel memory của 1 container không đủ, thì nó sẽ block các tài nguyên ở trên host, và sẽ ảnh hưởng tới host và các containers khác |
--oom-kill-disable |
Mặc định, nếu xảy ra lỗi out of mem, kernel sẽ thực hiện kill các tiến trình của 1 container. Để thay đổi điều này, ta có thể sử dụng options –oom-kill-disable. Ta chỉ disable oom ở trên container nào có set -m/–memory option. Nếu flag -m không được set, thì host có thể hết bộ nhớ và kernel có thể sẽ phải kill các tiến trình hệ thống của host để giải phóng bộ nhớ. |
--memory-swap
--memory-swap
chỉ có hiệu lực khi mà tùy chọn --memory
được thiết lập. Sử dụng swap cho phép container ghi các bộ nhớ thừa vào disk khi mà container cạn kiệt tài nguyên Ram có sẵn cho nó.--memory-swap
đi với một số nguyên dương thì cả --memory
và --memory-swap
phải được thiết lập. --memory-swap
đại diện cho tổng só lượng bộ nhớ ram và swap có thể sử dụng, --memory
đại diện cho lượng bộ nhớ ram. ví dụ --memory=700m --memory-swap=1g
thì container có thể sử dụng tối đa 700m ram và 300m swap.--memory-swap=0
thì coi như giá trị này không được thiết lập.--memory-swap
bằng với giá trị --memory
thì container không có quyền truy cập swap--memory
mà không có --memory-swap
thì mặc định container sẽ sử dụng lượng swap bằng gấp đôi lượng ram.memory-swap
được thiết lập giá trị -1
thì container sẽ sử dụng không giới hạn lượng swap, tối đa theo swap trên host.Tùy chọn | Mô tả |
---|---|
--cpus= |
Quy định lượng tài nguyên cpu mà container có thể sử dụng, ví dụ: --cpu="1.5" thì container có thể sử dụng 1 và một nửa cpu của host. từ docker 1.13 trở lên |
--cpu-period=<value> |
Specify the CPU CFS scheduler period, which is used alongside –cpu-quota. Defaults to 100 micro-seconds. Most users do not change this from the default. If you use Docker 1.13 or higher, use –cpus instead. |
--cpu-quota=<value> |
Impose a CPU CFS quota on the container. The number of microseconds per –cpu-period that the container is limited to before throttled. As such acting as the effective ceiling. If you use Docker 1.13 or higher, use –cpus instead. |
--cpuset-cpus |
Giới hạn container sử dụng những CPU được chỉ định. Nếu host có nhiều hơn một CPU thì cpu đầu tiên sẽ được đánh số bắt đầu từ 0. ví dụ --cpuset-cpus=0-2,5 thì container được sử dụng tài nguyên của cpu thứ 1,2,3 và 6 trên host |
--cpu-shares |
Set this flag to a value greater or less than the default of 1024 to increase or reduce the container’s weight, and give it access to a greater or lesser proportion of the host machine’s CPU cycles. This is only enforced when CPU cycles are constrained. When plenty of CPU cycles are available, all containers use as much CPU as they need. In that way, this is a soft limit. --cpu-shares does not prevent containers from being scheduled in swarm mode. It prioritizes container CPU resources for the available CPU cycles. It does not guarantee or reserve any specific CPU access. |
Nguồn tài liệu: https://github.com/TrongTan124/Timhieu-Docker/blob/master/docs/docker-canban/3.2.Cgroups.md https://docs.docker.com/config/containers/resource_constraints/
Tài liệu tham khảo thêm: