Score:0

จะเปลี่ยน cgroup ของกระบวนการย่อยของบริการ systemd แบบไดนามิกได้อย่างไร (ตัวรัน gitlab)

ธง ru

ฉันกำลังเรียกใช้ 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

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา