일정량의 CPU를 예약하려면 JVM이 필요합니다. 내 연구에 따르면 다른 프로세스가 해당 CPU를 사용하지 않도록 taskset
커널 매개변수를 사용하여 작업 할 수 있습니다.isolcpus=<CPU_ID>
몇 가지 문제가 발생합니다:
- 프로세스를 처음부터 다시 시작해야 합니까
taskset
? - 예약이란 프로세스가 해당 CPU에서만 실행될 수 있고 리소스 문제가 있는 경우 다른 CPU로 확장될 수 있음을 의미합니까?
답변1
일반적으로 이를 사용하여 taskset
프로세스가 시작된 후 프로세스를 제한합니다. 다음을 사용하여 pidof java
Java 애플리케이션의 PID를 확인할 수 있습니다 taskset
.
$ taskset -p $(pidof java) --cpu-list 0-2,5
노트:CPU가 6개 있는 경우 0, 1, 2, 5는 JVM PID에 대한 해당 CPU에 선호도를 할당합니다.
선호도는 다른 프로세스가 해당 CPU를 사용하는 것을 제한하지 않으며, taskset
독점성을 제한하는 것이 아니라 특정 프로세스를 특정 CPU 집합으로 제한하는 도구에 가깝습니다.
작업 세트는 PID가 지정된 실행 중인 프로세스의 CPU 선호도를 설정 또는 검색하거나 지정된 CPU 선호도를 사용하여 새 명령을 시작하는 데 사용됩니다. CPU 선호도는 프로세스를 시스템의 특정 CPU 집합에 "바인딩"하는 스케줄러 속성입니다. Linux 스케줄러는 지정된 CPU 선호도를 존중하며 프로세스는 다른 CPU에서 실행되지 않습니다. Linux 스케줄러는 자연적인 CPU 선호도도 지원합니다. 성능상의 이유로 스케줄러는 가능할 때마다 프로세스를 동일한 CPU에 유지하려고 시도합니다. 따라서 특정 CPU 선호도를 강제하는 것은 특정 애플리케이션에서만 유용합니다.
대안
이 자가 답변형 U&L 퀴즈 질문은 다음과 같습니다.cgroup을 사용하여 화이트리스트를 제외한 모든 프로세스를 단일 CPU로 제한하는 방법은 무엇입니까?이 작업을 수행하기 위해 cgroup을 사용하는 방법을 다루는 주제입니다.