Ubuntu/Virtualmin에서 CPU 코어를 제한하는 방법은 무엇입니까?

Ubuntu/Virtualmin에서 CPU 코어를 제한하는 방법은 무엇입니까?

시스템 정보
OS 유형 및 버전
*Ubuntu Linux 20.04.4

Virtualmin 버전 6.17-3*

나는 내 서버와 모든 가상 서버의 단독 소유자입니다. 서버에서 사용되는 리소스를 제한하고 싶습니다. 현재 다음과 같이limits.conf 파일을 편집하여 RAM 사용량을 설정했습니다.

oneofmyuser 하드 memlock 1024

이제 예제 코드에 있는 CPU 옵션과 혼동됩니다.

#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open file descriptors
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)

사용자가 코어를 1개 또는 2개만 사용하도록 제한하려면 어떻게 해야 합니까? 핵심 가치가 있지만 Kb 단위여야 하나요? 예를 들어 2개의 코어로 제한하고 싶나요? 그럼 몇kb인가요? CPU에도? 일반 WordPress 사이트가 있는 일반 서버에 대한 이러한 옵션의 이상적인 값은 무엇입니까?

답변1

Linux에서는 taskset. (보다 man taskset). (또한보십시오https://unix.stackexchange.com/questions/425065/linux-how-to-know-which-processes-are-pinned-to-which-core)

제어 그룹을 사용하여 100이 CPU 1개에 해당하는 CPU 사용량 제한을 설정하는 방법을 사용할 수도 있습니다 cpulimit(참조 ).man cpulimit

이들 중 하나를 사용하려면 사용자를 위해 어떤 프로세스가 시작되는지 확인하고 위 명령을 추가해야 합니다. 저는 Virtualmin에 대해 잘 알지 못하지만 오픈 소스이기 때문에 소스 코드를 파악하면 Virtualmin이 이러한 프로세스를 시작하는 위치를 꽤 쉽게 알 수 있을 것이라고 생각합니다.

의 CPU 시간 limits.conf은 시간 열에 표시된 대로 분 단위의 CPU 시간이므로 top프로세스가 독점적으로 실행되도록 허용된 시간을 측정한 것일 뿐입니다.

Limits.conf의 "core" 값( 참조 man limits.conf)은 디버깅을 위해 프로세스가 충돌할 경우 활성화할 수 있는 덤프인 코어 덤프 파일의 크기를 나타냅니다.

이에 대한 배경은 Linux가 정반대의 작업, 즉 CPU 전체에 작업을 분산하도록 설계되었으며 그 점에서 매우 뛰어나다는 것입니다. 멀티 코어 시스템에서 작업을 CPU로 합리적으로 제한하는 유일한 이유는 완벽한 타이밍 또는 타이밍 공격으로 작업을 수행하는 것입니다.

다른 옵션은 부트로더의 특정 코어에 OS를 잠그는 것입니다. 또는 단일 CPU를 에뮬레이트하거나 특정 CPU에 고정된 컨테이너를 실행할 수 있습니다.

관련 정보