CPU+RAM을 절약하기 위해 특정 프로세스의 리소스 사용량을 제한하는 방법은 무엇입니까?

CPU+RAM을 절약하기 위해 특정 프로세스의 리소스 사용량을 제한하는 방법은 무엇입니까?

sshd컴퓨터에 메모리가 부족하여 가끔 작동이 중지되는 개발 서버가 있습니다 . 예, 메모리가 부족하므로 현재로서는 업그레이드가 실행 가능한 옵션이 아닙니다. 내가 하고 싶은 것은 기계에게 "원하는 대로 하되 20MB와 약간의 CPU를 따로 남겨두세요 sshd!"라고 말하는 것입니다.

그럼 우리는 어떻게 해야 합니까?

답변1

다음을 사용하여 비슷한 결과를 얻을 수 있습니다.cgroup그리고메모리 리소스 컨트롤러.

나는 모든 리소스 소비 작업을 제한된(CPU 및 RAM)에 배치 하고 제한되지 않도록 "외부"에 cgroup보관할 것이라고 생각합니다.sshd

(스왑 파일 형태라도 더 많은 스왑을 추가하는 것이 좋은 선택일 수 있습니다.)

답변2

아, 하지만 cgroup은 쉽습니다 :) libcgroup 패키지를 설치하세요. /etc/cgconfig.conf를 생성합니다:

mount {
    cpu     = /cgroup/cpu_and_mem;
    cpuacct = /cgroup/cpu_and_mem;
    memory  = /cgroup/cpu_and_mem;
}

group sshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

group nosshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

cgconfig계층 구조, cgroup을 생성하고 제한을 설정하는 프로세스를 시작합니다 . 성공하면 CPU의 50%와 사용 가능한 메모리의 1G가 할당된 두 개의 cgroup이 생성됩니다(실제 사용 가능한 메모리 양이 얼마인지는 모릅니다. 이 예에서는 2G로 가정). 이제 루트 그룹의 모든 작업(즉, 시스템에서 실행 중인 모든 프로세스)을 nosshd cgroup으로 이동하기만 하면 됩니다.

cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks

그런 다음 프로세스의 PID를 가져와서 sshdsshd 작업 파일로 이동하면 됩니다.

cgroup]# echo $PID >> sshd/tasks

아빠, 이제 끝났어요. 이제 sshd의 CPU는 항상 50%이고 메모리는 1G이므로 안심하셔도 됩니다.

답변3

renice더 높은 우선순위를 얻 sshd거나 회계를 확인하는 데 사용됩니다 . (acct) -> 이를 통해 사용자에 대한 리소스를 설정할 수 있으므로 s와 함께 sshd를 실행하세요.

답변4

애플리케이션 리소스 사용 문제에 대한 보다 일반적인 해결책은 컨테이너에서 애플리케이션을 실행하는 것입니다.루스트어바웃. 그럼 넌 할 수 있어달리기cgroup과 유사한 CPU 및 메모리 사용량 제한이 있는 컨테이너입니다.

docker run -c=10 -m=1g my-container

관련 정보