Tôi đang điều hành một trình chạy gitlab và tôi muốn mỗi công việc tự đưa vào nhóm riêng của mình.
Tôi có thể đặt quy trình con gitlab bash thành nhóm bên phải, nhưng các phần tử con của nó không kế thừa nhóm đó.
Đây là cách tôi đang làm:
$ /usr/bin/ps -opid,cgroup $PPID $$
NHÓM PID
43547 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2:cpuacct,cpu:/user.slice,1: tên=systemd:/user.slice/user-988.slice/session-c2500.scope
43548 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2:cpuacct,cpu:/user.slice,1: tên=systemd:/user.slice/user-988.slice/session-c2500.scope
$ /usr/bin/sudo /usr/bin/env CGROUP_LOGLEVEL=DEBUG /usr/bin/cgclassify -g cpu,cpuacct:/gitlab-runner/$CI_CONCURRENT_PROJECT_ID --sticky $PPID $$
đã tìm thấy cpu trong rw,nosuid,nodev,noexec,relatime,cpuacct,cpu
Đã tìm thấy tùy chọn cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu, đếm 0
...cắt tỉa...
Sẽ chuyển pid 43547 sang cgroup '/gitlab-runner/0'
Thêm bộ điều khiển cpu
Thêm bộ điều khiển cpuacct
Sẽ chuyển pid 43548 sang cgroup '/gitlab-runner/0'
Thêm bộ điều khiển cpu
Thêm bộ điều khiển cpuacct
$ /usr/bin/ps -opid,cgroup $PPID $$
NHÓM PID
43547 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2:cpuacct,cpu:/gitlab-runner/0, 1:name=systemd:/user.slice/user-988.slice/session-c2500.scope
43548 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2:cpuacct,cpu:/gitlab-runner/0, 1:name=systemd:/user.slice/user-988.slice/session-c2500.scope
Truy vấn một lần chạy khác, tìm các quy trình trong cgroup:
$ ps -e -opid,comm,cgroup | grep gitlab-runner/3
77554 su 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2:cpuacct,cpu:/gitlab-runner/3 ,1:name=systemd:/user.slice/user-988.slice/session-c2604.scope
77555 bash 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2:cpuacct,cpu:/gitlab-runner/3 ,1:name=systemd:/user.slice/user-988.slice/session-c2604.scope
Nhìn con nó...
$ pstree -p 77554
su(77554)âââbash(77555)âââbash(77575)âââpython3.6(78199)ââ ârun-cypress-spl(78206)âââcoverage(80245)ââ¬ânode(91561)ââ¬âCypress(91796 )ââ¬âCypress(91799)âââCypress(91990)ââ¬â{Cypress}(91992)
â â â ââ{Cypress}(91993)
con của nó không có trong cgroup:
$ ps -opid,comm,cgroup 78206 | con mèo
CGROUP LỆNH PID
78206 run-cypress-spl 78206 run-cypress-spl 11:blkio:/user.slice,9:devices:/user.slice,7:pids:/user.slice,6:memory:/user.slice,2: cpuacct,cpu:/user.slice,1:name=systemd:/user.slice/user-988.slice/session-c2604.scope
tôi cũng tìm thấy https://stackoverflow.com/questions/50749408/how-systemd-tracks-fork- process-with-type-fork điều đó ngụ ý rằng systemd có thể ngăn kế thừa cgroup tại ngã ba.
Có cách nào để giái quyết vấn đề này không?
CentOS7, systemd-219-78.el7_9.5.x86_64.
Cập nhật: Nếu tôi hiểu cái này câu trả lời, câu trả lời có thể là Delegate=true. Tôi không nghĩ rằng điều này được hỗ trợ trên hệ thống này... Tôi sẽ thử nó tiếp theo.
Cập nhật: Tôi đã thử điều này và không tìm thấy sự khác biệt nào:
$ con mèo /etc/systemd/system/gitlab-runner.service.d/override.conf
[Dịch vụ]
Đại biểu = có
Cập nhật: đây có thể là một cách thay thế tôi sẽ thử tiếp theo: https://unix.stackexchange.com/questions/490978/limit-cpu-and-memory-consumption-of-all-x-applications