프로세스가 너무 많은 CPU를 사용하지 않도록 방지(사용 가능한 경우에도)

프로세스가 너무 많은 CPU를 사용하지 않도록 방지(사용 가능한 경우에도)

너무 많은 CPU를 사용하는 하나의 프로세스를 피하고 싶습니다. 사실 저는 Debian이 설치된 Raspberry Pi에서 실행해야 하는 매우 긴 CPU 요구 작업(비디오 변환)이 있기 때문에 CPU가 과열되는 것을 방지하고 싶습니다. 온도가 80°C 이상으로 상승합니다.

명령 이 있는 것을 보았지만 cpulimit명령을 실행하는 방법을 모르겠습니다. bash 명령 자체가 아닌 pid(프로세스 ID)를 인수로 사용하거나 실행할 코드가 포함된 실행 파일로 사용하는 것 같기 때문입니다. . 내 작업이 무엇을 반환하는지 직접 확인하고 필요할 때 Ctrl-C를 누를 수 있기를 원합니다. 참고: 작업 명령을 파일에 넣고 실행하려고 하면 cpulimit -l 20 --path=/path/to/my/file.sh반환되므로 Warning: no target process found. Waiting for it...1) --path 매개변수가 실제로 수행하는 작업, 2) CPUlimit 명령을 올바르게 사용하는 방법을 이해할 수 없는 것처럼 보입니다. 어느 터미널.. .

저 할 수 있어요선호하다 사용하지 마세요유사한 해결 방법 nohup my-command --my-args &은 두 번째로 pid를 반환하고 그에 대한 cpulimit 명령을 작성할 수 있게 해주더라도 마찬가지입니다.

미리 감사드립니다!

답변1

하드웨어의 전원 관리 기능을 활용하세요

CPU 온도를 낮추는 것이 목표라면 CPU가 더 일찍 제한되도록 전원 관리 매개변수를 조정하는 것이 좋습니다. Raspberry Pi 모델에 따라 온도를 낮춰야 할 수도 있습니다 temp_soft_limit( config.txt기본값은 60°C인 것 같습니다). 보다라즈베리 파이 문서더 알아보기.

통제 그룹 사용

또 다른 옵션은 cgroup을 사용하여 프로세스가 사용할 수 있는 리소스의 양을 제한하는 것입니다. cgroup은 생성될 수 있는 하위 프로세스도 고려하며 데몬에도 적용될 수 있습니다. CPU 사용량을 제한하고 싶다면 즐겨 사용하는 셸이 sed, awk 등과 같은 도구를 생성하거나 Chrome 브라우저가 각 탭에 대해 별도의 프로세스를 생성한다고 가정하면 CPU 주기 수에 제한이 설정됩니다.모두영향을 받은 cgroup의 프로세스가 태워질 수 있습니다.

다음과 같이 "cpulimit"라는 제어 그룹을 생성할 수 있습니다.

$ sudo cgcreate -g cpu:/cpulimit

이 제어 그룹의 프로세스 제한을 CPU 시간의 20%로 설정합니다.

$ sudo cgset -r cpu.cfs_period_us=1000000 cpulimit
$ sudo cgset -r cpu.cfs_quota_us=200000 cpulimit

애플리케이션을 실행합니다.

$ sudo cgexec -g cpu:cpulimit <command>

답변2

두 가지 답변을 드리겠습니다. 하나는 유용 cpulimit하고 다른 하나는 더 의미가 있습니다.

첫 번째 답변: 조절 스크립트를 사용하려는 경우 cpulimit아래 스크립트 내에서 개별 작업을 실행해 보는 것은 어떨까요 cpulimit? 예를 들어:

#!/bin/dash
cpulimit --limit 20 -- ~/bin/mprime/mprime -t  # starts a slow mprime

대체 답변: 몇 가지 xy 질문을 하셨습니다. CPU에 냉각 시간을 주고 싶지만 사용 중인 프로그램은 프로세스를 빠르게 일시 중지하고 다시 시작하여 이를 수행합니다.

NOTES
    cpulimit always sends the SIGSTOP and SIGCONT signals to a process,
    both to verify that it can control it  and  to  limit  the  average
    amount  of  CPU it consumes ...

bash이는 단 한 줄의 코드로 복제 할 수 있는 부정확한 복사일 뿐만 아니라 cpulimit프로그램을 망칠 수 있는 방식으로 파일 설명자를 망친다는 점에도 유의하세요. 예를 들어, 대화형 모드 에서 첫 번째 예제를 mprime실행 하면 SIGKILL 신호를 수동으로 발행할 때까지 터미널에 cpulimit --limit 20 -- ~/bin/mprime/mprime무한 루프의 프롬프트가 표시되는 것을 볼 수 있습니다 .mprimecpulimitmprime

목표는 프로세서에 유휴 시간을 주는 것입니다. 이를 수행하는 적절한 방법은 프로세서의 클럭 주파수를 낮추어 아무것도 하지 않고 더 많은 시간을 보낼 수 있도록 하는 것입니다. 문제의 장치는 Raspberry Pi이므로 수행하기가 그리 어렵지 않습니다.

추신: Rui F Ribeiro의 말이 맞습니다. 프로세서 집약적인 작업을 단일 코어로 제한하면 온도를 더 낮게 유지하는 데 도움이 됩니다. 동일한 양의 전력이 여전히 동일한 칩에 주입되기 때문에 프로세서 냉각에 도움이 되지 않으므로 코어 간에 프로세스를 지속적으로 이동하는 것은 의미가 없습니다.

관련 정보