프로세스를 CPU 사용량의 10% 이하로 제한하세요.

프로세스를 CPU 사용량의 10% 이하로 제한하세요.

내가 사용하는 Linux 시스템에는 사용자가 많지만 때로는 사용자가 CPU/메모리의 80% 이상을 차지하는 프로세스를 실행할 수도 있습니다.

그렇다면 프로세스가 사용할 수 있는 CPU 사용량을 제한(예: 10%)하여 이러한 일이 발생하지 않도록 하는 방법이 있습니까? 알고 있지만 cpulimit안타깝게도 내가 제한하도록 지시한 프로세스(예: 단일 프로세스)에 제한이 적용됩니다. 그래서 내 질문은 ID/경로를 제공하지 않고 앞으로 실행될 모든 실행 프로세스와 프로세스에 제한을 어떻게 적용할 수 있습니까?

답변1

니스/레니스

nice시스템을 "일회성"으로 조정할 수 있는 탁월한 도구입니다.

 nice COMMAND

CPU 한도

cpulimitCPU 집약적인 작업을 실행해야 하는 경우 유휴 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...

관련 정보