sshd
컴퓨터에 RAM이 부족하여 때때로 작동이 중지 되는 dev 서버 가 있습니다. 예, 우리는 메모리가 부족하여 업그레이드가 실현 가능한 선택이 아닙니다. 내가하고 싶은 것은 기계에게 "원하는대로하라. 그러나 20MB와 약간의 CPU는 남겨 두라 sshd
!" 라고 말하는 것이다 .
어떻게 할 수 있습니까?
sshd
제대로 동작 하더라도 사용할 CPU / RAM이 충분하지 않으면 중단 될 것이라고 생각하지 않습니까?
sshd
컴퓨터에 RAM이 부족하여 때때로 작동이 중지 되는 dev 서버 가 있습니다. 예, 우리는 메모리가 부족하여 업그레이드가 실현 가능한 선택이 아닙니다. 내가하고 싶은 것은 기계에게 "원하는대로하라. 그러나 20MB와 약간의 CPU는 남겨 두라 sshd
!" 라고 말하는 것이다 .
어떻게 할 수 있습니까?
sshd
제대로 동작 하더라도 사용할 CPU / RAM이 충분하지 않으면 중단 될 것이라고 생각하지 않습니까?
답변:
메모리 자원 제어기 와 함께 cgroup 을 사용하여 이와 같은 것을 달성 할 수 있습니다 .
모든 리소스 소비 작업을 제한된 (CPU & RAM) cgroup
에 넣고 sshd
"외부"로 남겨두면 제한되지 않습니다.
스왑 파일 형식으로도 스왑을 더 추가하는 것이 좋습니다.
아 그러나 cgroups는 쉽다 :) 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
그런 다음 sshd
프로세스 의 PID를 가져 와서 sshd 작업 파일로 이동해야합니다.
cgroup]# echo $PID >> sshd/tasks
타다 끝났어 이제 sshd는 항상 50 %의 CPU와 1G의 메모리를 가지게됩니다.
의 renice
우선 순위를 높이 sshd
거나 계정을 확인하는 데 사용합니다. (acct)-> 이것으로 사용자를위한 리소스를 설정할 수 있으므로 sshd를 s로 실행하십시오
ionice
그것에 덧붙여서 나중에 낭독하지 않는 좋은 sshd를 시작할 것입니다.