표준 GNU/Linux 도구를 사용하여 프로세스 그룹의 CPU 소비를 제한하는 방법은 무엇입니까?

표준 GNU/Linux 도구를 사용하여 프로세스 그룹의 CPU 소비를 제한하는 방법은 무엇입니까?

동일한 이름의 프로세스가 여러 개 있습니다. 이 프로세스는 내 CPU 시간의 100%를 차지합니다. 이 프로세스가 50%를 넘지 않기를 바랍니다.

추가 소프트웨어를 설치하지 않고 어떻게 이 작업을 수행할 수 있습니까?

답변1

이에 대한 커널 수준 메커니즘을 보려면 Linux에서 읽어야 합니다.통제 그룹. 이는 아직 활발하게 개발 중인 영역이므로 읽은 내용이 현재 보유하고 있는(또는 설치하려는) 커널과 일치하는지 확인해야 합니다.

추가로 아무것도 설치하지 않는다고 말했지만 cgred이름이 일치하는 프로세스를 CPU cgroup으로 이동하는 프로세스를 자동화하기 위해 설치를 고려할 수 있습니다. 데비안에서는 패키지에 들어 있습니다 cgroup-bin.

답변2

STOP 및 CONT 신호를 사용하여 bash 쉘, sleep, pgrep 및 pkill 명령으로 이를 수행할 수 있습니다.

다음 한 줄은 프로세스가 사용 가능한 총 CPU 시간의 최대 50%를 사용하도록 만듭니다. 매 100밀리초마다 실행되고 다음 100밀리초 동안 중지됩니다.

while [ True ]; do pkill -STOP processname; sleep 0.1s; pkill -CONT processname; sleep 0.1s; done

다음은 가독성을 위해 동일한 코드를 여러 줄로 나눈 것입니다.

while [ True ]
     do pkill -STOP processname
     sleep 0.1s
     pkill -CONT processname
     sleep 0.1s
done

프로세스 이름 패턴을 일치하는 프로세스가 얼마나 많이 존재하는지에 관계없이 모두 동시에 중지되고 계속되기 때문에 CPU 사용량의 50%를 초과할 수 없습니다. 즉, 프로세스가 실행될 때 사용 가능한 CPU 시간을 공유해야 함을 의미합니다. 활동적인. 이렇게 하면 한도가 충족됩니다.

거의 동일한 작업을 수행하는 cpulimit라는 프로그램이 있습니다.

답변3

추가 소프트웨어를 설치하지 않고도 nice. 값 범위는 다음과 같습니다.-20에게19.

nice -20 some_command

some_command을 제공합니다최우선 순위, 그리고

nice 19 some_command

some_command을 제공합니다가장 낮은 우선순위.

답변4

위에 쓰여진 대로 OOM-killer를 지원하거나 그 사용을 방지하기 위한 스크립트로 사용될 수 있습니다.

CPU 전체가 x분 동안 75%에 도달하면 pkill.sh를 실행한다고 말합니다.

 ../scripts/boottime/OOMkiller.sh

while [ true] ; 
    do  inxi -tcm5 > ~/cpu.log 
    sleep 0.5s 
    inxi -tcm5 >> ~/cpu/log | diff -m > ~/offender.log
done

for i in offender.log ;
    do ./scripts/pkill.sh
done

 ../scripts/pkill.sh
while [true] 
    do pgrep $(i) -STOP $PID
    pkill -STOP $PID
    sleep 0.5s 
    pkill -CONT $PID
done

관련 정보