저는 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
.
그러나 이상적으로는 전체 사용자 계정을 제한하고 싶습니다.
그리고 네, 저는 cloudlinux에 대해 알고 있지만 지금은 그렇게 할 수 없습니다. 그렇게 할 수 있을 때까지는 서버 재부팅이 필요하지 않은 작업을 수동으로 수행하는 데 도움이 필요합니다.
답변1
프로세스(PID)를 사용하여 친구를 제한할 수 없다는 것이 맞습니다. Apache는 수신되는 모든 요청에 대해 새 프로세스(작업자)를 생성하여 매번 새 PID를 할당합니다.
에서 설정한 PHP 핸들러에 따라 WHM -> MultiPHP Manager -> PHP Handlers
Apache는 PHP 스크립트를 자체적으로 실행하거나 파일을 소유한 사용자로 실행합니다. 핸들러로 사용하면 suPHP
파일을 소유한 계정으로 PHP 프로세스가 실행됩니다.
소유자가 스크립트를 실행하는 경우 CPU 사용량을 파일에 추가하여 계정의 CPU 사용량을 제한할 수 있습니다 /etc/security/limits.conf
. 이를 사용하여 CPU 비율을 정확하게 제한할 수는 없지만 해당 프로세스가 서버의 다른 프로세스보다 낮은 우선 순위를 갖도록 'nice' 값을 수정할 수 있습니다. 따라서 다른 프로세스는 오래 기다릴 필요가 없습니다.
저는 이것을 직접 사용해본 적이 없지만(CloudLinux를 실행합니다) 다음 항목을 믿습니다.~해야 한다문제에 대한 도움:
username hard priority 30
이는 사용자가 실행하는 프로세스의 최대 우선순위를 30으로 설정합니다. 제가 이해한 바에 따르면 우선순위가 높을수록 다른 프로세스(우선순위가 낮음)가 더 많은 CPU 시간을 얻는다는 의미입니다.
cPanel을 실행하는 내 서버에서 대부분의 프로세스의 우선 순위는 20이므로 위 논리에 따라 해당 사용자의 우선 순위를 30으로 설정하면 다른 프로세스가 이러한 프로세스보다 먼저 실행될 수 있습니다.
답변2
시도해 보셨나요?C그룹?
- 서비스를 설치
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_기간_us를 1000000으로 설정합니다.
Cgred는 /etc/cgrules.conf 파일에 설정된 매개변수에 따라 작업을 cgroup으로 이동하는 서비스(cgrulesengd 서비스 시작)입니다. /etc/cgrules.conf 파일의 항목은 다음 두 가지 형식 중 하나를 취할 수 있습니다.
user subsystems control_group
user:command subsystems control_group
user
사용자 이름 또는 그룹 이름 앞에는 "@" 문자가 붙습니다 . subsystems
쉼표로 구분된 하위 시스템 이름 목록으로 바꾸고 control_group
cgroup에 대한 경로를 나타내며 command
프로세스 이름 또는 프로세스의 전체 명령 경로를 나타냅니다.
예 etc/cgrules.conf:
*:firefox cpu,memory browsers/
@admin:memhog memory limitmem/
cpuhog cpu limitcpu/
firefox
모든 사용자가 실행하는 프로세스는 자동으로 브라우저에 추가되며cgroup
CPU 및 메모리 하위 시스템이 제한됩니다.memhog
그룹 의 모든 사람이 실행하는 프로세스는admin
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/%를 위해 무시됩니다. 유".
답변3
아마도 /etc/security/limits.conf를 설정하여 사용자가 소비할 수 있는 CPU 시간과 메모리 양을 조정할 수 있을 것입니다. 자세한 내용은 참조https://linux.die.net/man/5/limits.conf