내가 사용하는 Linux 시스템에는 사용자가 많지만 때로는 사용자가 CPU/메모리의 80% 이상을 차지하는 프로세스를 실행할 수도 있습니다.
그렇다면 프로세스가 사용할 수 있는 CPU 사용량을 제한(예: 10%)하여 이러한 일이 발생하지 않도록 하는 방법이 있습니까? 알고 있지만 cpulimit
안타깝게도 내가 제한하도록 지시한 프로세스(예: 단일 프로세스)에 제한이 적용됩니다. 그래서 내 질문은 ID/경로를 제공하지 않고 앞으로 실행될 모든 실행 프로세스와 프로세스에 제한을 어떻게 적용할 수 있습니까?
답변1
니스/레니스
nice
시스템을 "일회성"으로 조정할 수 있는 탁월한 도구입니다.
nice COMMAND
CPU 한도
cpulimit
CPU 집약적인 작업을 실행해야 하는 경우 유휴 CPU 시간은 시스템 응답성에 매우 중요합니다.
cpulimit -l 50 -- COMMAND
cgroup
cgroups
하나가 아닌 프로세스 그룹에 제한을 적용합니다.
cgcreate -g cpu:/cpulimited
cgset -r cpu.shares=512 cpulimited
cgexec -g cpu:cpulimited COMMAND_1
cgexec -g cpu:cpulimited COMMAND_2
cgexec -g cpu:cpulimited COMMAND_3
자원
http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups
http://manpages.ubuntu.com/manpages/xenial/man1/cpulimit.1.html
답변2
메모리를 남용할 수는 있지만 CPU를 남용하지는 않습니다. CPU가 유휴 상태일 때 실행 중인 프로세스("실행 중"이란 프로세스가 I/O 등을 기다리지 않는다는 의미)가 메모리를 차지합니다. 기본값은 100% CPU 시간입니다. 그리고 제한을 가할 이유도 없습니다.
이제 를 통해 우선순위를 설정할 수 있습니다 nice
. 특정 사용자의 모든 프로세스에 이를 적용하려면 사용자의 로그인 쉘이 실행 중인지 확인하기만 하면 됩니다 nice
. 하위 프로세스가 값을 상속합니다 nice
. 이는 사용자가 로그인하는 방법에 따라 다릅니다. 보다SSH 로그인 우선 순위 지정(양호)예를 들어.
또는 가상 머신을 설정할 수 있습니다. 실제로 프로세스별 제한을 설정하는 것은 사용자가 많은 프로세스를 시작하여 시스템을 남용할 수 있으므로 별 의미가 없습니다. 가상 머신의 경우 모든 제한은 가상 머신에 전역적으로 적용됩니다.
또 다른 해결책은 /etc/security/limits.conf
제한을 설정하는 것입니다.limit.conf(5) 매뉴얼 페이지를 참조하십시오. 예를 들어 로그인당 최대 CPU 시간 및/또는 로그인당 최대 프로세스 수를 설정할 수 있습니다. maxlogins
사용자당 1개로 설정할 수도 있습니다 .
답변3
cgroup을 본 적이 있나요? 뭔가가 있습니다아치스 위키그들에 대해. 이에 대한 부분을 읽어보면 cpu.shares
필요한 작업을 수행하는 것처럼 보이며 사용자 수준에서 작동하므로 모든 사용자 프로세스를 한 번에 조절할 수 있습니다.
답변4
귀하의 태그가 거기에 있으므로 centos
이를 사용할 수 있습니다 systemd
.
예를 들어, 다음 ID로 사용자를 제한하려는 경우 1234
:
sudo systemctl edit --force user-1234.slice
그런 다음 다음을 입력하고 저장합니다.
[Slice] CPUQuota=10%
이는 사용자가 다음에 로그인할 때 영향을 받습니다.
매뉴얼 페이지: systemctl
, systemd.slice
, systemd.resource-control
...