ฉันกำลังเรียกใช้ gitlab Runner และฉันต้องการให้แต่ละงานจัดกลุ่มของตัวเอง
ฉันสามารถตั้งค่า gitlab bash subprocess เป็น cgroup ที่ถูกต้องได้ แต่ลูกของมันจะไม่สืบทอด cgroup
นี่คือวิธีที่ฉันทำ:
$ /usr/bin/ps -opid,cgroup $PPID $$
PID CGROUP
43547 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-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: name=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 $$
พบซีพียูใน rw,nosuid,nodev,noexec,relatime,cpuacct,cpu
พบตัวเลือก cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu,นับ 0
...เล็ม...
จะย้าย pid 43547 ไปที่ cgroup '/gitlab-runner/0'
การเพิ่มซีพียูคอนโทรลเลอร์
การเพิ่ม cpuacct ของคอนโทรลเลอร์
จะย้าย pid 43548 ไปที่ cgroup '/gitlab-runner/0'
การเพิ่มซีพียูคอนโทรลเลอร์
การเพิ่ม cpuacct ของคอนโทรลเลอร์
$ /usr/bin/ps -opid,cgroup $PPID $$
PID CGROUP
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
ค้นหาการเรียกใช้อื่น ค้นหากระบวนการในกลุ่ม c:
$ 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 ทุบตี 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
มองดูลูกๆของมัน...
$ 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)
â â â ââ{ไซเปรส}(91993)
ลูกๆ ของมันไม่ได้อยู่ในกลุ่ม:
$ ps -opid,comm,cgroup 78206 | แมว
กลุ่มคำสั่ง 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
ฉันยังพบ https://stackoverflow.com/questions/50749408/how-systemd-tracks-fork-process-with-type-fork ซึ่งหมายความว่า systemd อาจป้องกันการสืบทอด cgroup ที่ทางแยก
มีวิธีแก้ไขปัญหานี้หรือไม่?
CentOS7, systemd-219-78.el7_9.5.x86_64
ปรับปรุง: ถ้าฉันเข้าใจ นี้ คำตอบ คำตอบอาจเป็น Delegate=true ฉันไม่คิดว่าจะรองรับ systemd นี้... ฉันจะลองต่อไป
อัปเดต: ฉันลองสิ่งนี้แล้วและไม่พบความแตกต่าง:
$ cat /etc/systemd/system/gitlab-runner.service.d/override.conf
[บริการ]
ผู้รับมอบสิทธิ์=ใช่
อัปเดต: นี่อาจเป็นทางเลือกที่ฉันจะลองต่อไป: https://unix.stackexchange.com/questions/490978/limit-cpu-and-memory-consumption-of-all-x-applications