프로세스뿐만 아니라 전체 사용자를 CPU의 10 % 미만으로 제한하는 방법은 무엇입니까?


8

centos, cpanel / whm을 실행 중이며 cpulimit가 설치되어 있습니다.

내가 겪고있는 문제는 내 사용자 중 하나가 극단적 인 CPU 사용량을 사용하고 있다는 것입니다. 일관되게 100 %가 넘고 서버 속도가 느려집니다.

더 큰 문제는 그들이 친구이고 악의적이지 않다는 것입니다. 그래서 나는 그들을 일시 중단하고 싶지 않습니다.

또한 더 중요한 문제는 프로세스별로 제한 할 수 없다는 것입니다.이 프로세스는 매 초마다 변경되기 때문입니다. 매번 다른 과정입니다.

다음을 시도했지만 작동하지 않습니다.

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

방금 돌아 왔어요

No process found
No process found
No process found
No process found
No process found
No process found

기타

그 극단적 인 CPU 사용량을 사용하는 두 가지가 있습니다.

우선 그 위치에있는 파일 index.php입니다. WHM에서 의미하는 것은 무엇이든 [php]입니다. 그러나 주로 index.php문제입니다.

index.php해당 위치에서 해당 파일을 제한 할 수 있으면 이 문제를 완화하는 데 도움이 될 수 있습니다.

그건 그렇고, 나는 -P깃발을 시험해 보았지만 문서와 달리 옵션으로 사용할 수는 없습니다.

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

보고

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

-e플래그 와 함께 해야하는 것처럼 보입니다 .

이상적으로는 전체 사용자 계정을 제한하고 싶습니다.

그리고 네, 나는 클라우드 리눅스에 대해 알고 있지만 지금은 그렇게 할 수 없습니다. 내가 할 수있을 때까지 서버 재부팅이 필요없는 작업을 수동으로 수행하는 데 도움이 필요합니다.

답변:


1

프로세스 (PID)를 사용하여 친구를 제한 할 수 없다는 것이 맞습니다. Apache는 매 요청마다 새로운 프로세스 (작업자)를 생성하여 매번 새로운 PID를 할당합니다.

에서 설정 한 PHP 핸들러에 따라 WHM -> MultiPHP Manager -> PHP HandlersApache는 자체적으로 PHP 스크립트를 실행하거나 파일을 소유 한 사용자로 실행합니다. suPHP핸들러로 사용 하면 파일을 소유 한 계정으로 PHP 프로세스가 실행됩니다.

소유자가 스크립트를 실행 한 경우 /etc/security/limits.conf파일 에 추가하여 CPU 사용량을 계정으로 제한 할 수 있습니다 . 이를 사용하여 CPU 백분율을 정확하게 제한 할 수는 없지만 'nice'값을 수정하여 해당 프로세스가 서버의 다른 프로세스보다 우선 순위를 낮추도록 할 수 있습니다. 따라서 다른 프로세스는 오래 기다릴 필요가 없습니다.

나는 이것을 직접 사용해 본 적이 없지만 (CloudLinux를 실행) 다음 항목 문제를 해결하는 데 도움 될 것이라고 생각합니다 .

username    hard    priority    30

이것은 사용자가 실행하는 프로세스의 최대 우선 순위를 30으로 설정합니다. 내가 이해 한 바에 따르면, 우선 순위가 높을수록 다른 프로세스 (우선 순위가 낮은)가 더 많은 CPU 시간을 얻는다는 것을 의미합니다.

cPanel을 실행하는 서버에서 대부분의 프로세스는 우선 순위가 20이므로 위의 논리에 따라 해당 사용자의 우선 순위를 30으로 설정하면 다른 프로세스가 이러한 프로세스보다 먼저 실행될 수 있습니다.


5

Cgroups 를 사용해 보셨습니까 ?


  • 서비스를 설치 sudo yum install libcgroup하고 시작하십시오 sudo service cgconfig start.
  • 다음을 실행하여 cgroup의 서브 시스템 구성을 본 후 sudo ls /cgroup

이라는 cgroup을 만듭니다 limitcpu. group으로 시작하는 줄은 cgroup을 만들고 하위 시스템 매개 변수를 설정합니다.

예 /etc/cgconfig.conf :

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

CPU 제한에는 명백한 CPU 사용을 제한하는 데 사용할 수 있는 몇 가지 조정 가능한 매개 변수 가 있습니다

cgroup의 작업이 1 초마다 0.1 (10 %) 초 동안 단일 CPU에 액세스 할 수 있어야하는 경우 cpu.cfs_quota_us를 100000으로, cpu.cfs_period_us를 1000000으로 설정하십시오.


Cgred는 /etc/cgrules.conf 파일에 설정된 매개 변수에 따라 작업을 cgroup으로 이동시키는 서비스 (cgrulesengd 서비스를 시작 함)입니다. /etc/cgrules.conf 파일의 항목은 다음 두 가지 형식 중 하나를 취할 수 있습니다.

user subsystems control_group
user:command subsystems control_group

어디에서 user사용자 이름 또는 "@"문자로 시작 그룹 이름. 교체 subsystems서브 시스템 이름의 쉼표로 구분 된 목록으로, control_groupcgroup은 경로를 나타내며, command프로세스 이름 또는 프로세스의 전체 명령 경로를 의미합니다.

etc / cgrules.conf 예 :

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefox모든 사용자가 실행 한 프로세스는 브라우저에 자동으로 추가 cgroup되고 CPU 및 메모리 하위 시스템으로 제한됩니다.

  • memhogadmin그룹의 모든 사람이 실행 한 프로세스 는 cgroup에 추가 limitmem되고 메모리 하위 시스템이 제한됩니다.

    -사용자 cpuhog가 cgroup 'limitcpu'에 추가되고 CPU 하위 시스템으로 제한됩니다.


사전 사용 사례에서는 템플릿을 대신 사용해 볼 수 있습니다.

예를 들어, /etc/cgconfig.conf에 다음 템플릿을 지정하십시오.

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

그런 다음 /etc/cgrules.conf 항목의 세 번째 행에서 users / % g / % u 템플릿을 사용하십시오.

peter:ftp       cpu     users/%g/%u

%g and %u위에서 사용한 변수가 자동으로 그룹 및 사용자 이름은 FTP 프로세스의 소유자에 따라 교체된다.

프로세스가 adminstaff 그룹의 peter에 속하는 경우 위 경로는로 변환됩니다 users/adminstaff/peter.

cgred 서비스는이 디렉토리를 검색하고 존재하지 않는 경우 cgred가 디렉토리를 작성하여 프로세스를 users / adminstaff / peter / tasks에 지정합니다.

템플릿 규칙은 구성 파일의 템플릿 정의에만 적용되므로 "group users / adminstaff / peter"가 /etc/cgconfig.conf에 정의되어 있어도 "template users / % g / %를 위해 무시됩니다. 유".

Digital Ocean의 튜토리얼.

컨트롤 그룹 소개.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.