데몬을 다시 로드하면 cgroup의 cgroup.subtree_control이 재설정됩니다.

데몬을 다시 로드하면 cgroup의 cgroup.subtree_control이 재설정됩니다.

mycgroupusing이라는 이름의 cgroup을 만들었습니다 mkdir /sys/fs/cgroup/mycgroup.

실행 전 echo +cpu > /sys/fs/cgroup/cgroup.subtree_control:

[root@host ~]# cat /sys/fs/cgroup/mycgroup/cpu.max
cat: /sys/fs/cgroup/mycgroup/cpu.max: No such file or directory

실행 후 echo +cpu > /sys/fs/cgroup/cgroup.subtree_control:

[root@host ~]# cat /sys/fs/cgroup/mycgroup/cpu.max
max 100000

그러나 실행 후 systemctl daemon-reload:

[root@host ~]# cat /sys/fs/cgroup/mycgroup/cpu.max
cat: /sys/fs/cgroup/mycgroup/cpu.max: No such file or directory

데몬 다시 로드가 cgroup.subtree_control파일을 재설정하는 중입니다. 데몬을 다시 로드해도 파일에서 CPU가 제거되지 않도록 설정을 영구적으로 만들 수 있습니까?

답변1

알아냈어요.

에서 인용systemd의 cgroups 구성은 어디에 있습니까?

내가 읽은 대로 CPUShares에 대해 설정된 값이 없고 CPUAccounting이 어디에서나 명시적으로 활성화되지 않은 경우(그리고 DefaultCPUAccounting이 system.conf에 설정되지 않은 경우) systemd는 모든 계층 구조에서 CPU를 사용하지 않을 수 있습니다(그렇지 않습니까?).

이것은 기본적으로 정확합니다. 단순히 전선을 연결하는 것만 DefaultCPUAccounting=yes으로는 /etc/systemd/system.conf아무런 변화가 없었습니다 .

키 포인트:CPU 컨트롤러가 필요한 서비스 유닛 파일이 없으면 systemd는 해당 파일을 열지 않는 것 같습니다.

그래서 테스트해봤습니다. 새로운 Debian 12 시스템으로 재부팅했습니다.

cat /sys/fs/cgroup/cgroup.subtree_control
memory pids

다음 [Service]섹션 에 추가했습니다 /usr/lib/systemd/system/nginx.service.

# https://unix.stackexchange.com/a/495013/237874
# https://unix.stackexchange.com/questions/494843/how-to-limit-a-systemd-service-to-play-nice-with-the-cpu/495013#495013
CPUQuota=75%

그 다음에...

systemctl daemon-reload
cat /sys/fs/cgroup/cgroup.subtree_control
cpu memory pids

재부팅 후에도 subtree_control은 여전히 ​​CPU를 나열합니다!

편집: 파일에 다음을 생성합니다 CPUQuota=75%./usr/lib/systemd/system/nginx.service

cat /sys/fs/cgroup/system.slice/nginx.service/cpu.max
75000 100000

관련 정보