
8GB 메모리가 있는 Linux 시스템에서 여러 하위 프로세스를 시작하는 장기 실행 스크립트가 있습니다. 몇 시간 실행한 후에는 거의 90%의 메모리를 차지하며 이로 인해 디스크 스와핑을 시작할 때 SSH와 같은 다른 서비스가 응답하지 않게 됩니다.
각 프로세스에 대해 개별적으로 특정 메모리 제한을 설정하지 않고 스크립트와 모든 하위 프로세스에 대한 전체 메모리 사용량을 프로그래밍 방식으로 제한하는 가장 좋은 방법은 무엇입니까? 다양한 하위 프로세스는 매우 다른 양의 메모리를 사용할 수 있으므로 고정된 임계값을 설정하는 것은 매우 비효율적입니다.
이상적으로는 "메모리의 최대 75%만 사용"을 지정하고 필요에 따라 시스템이 이를 하위 항목에 나누어 언제든지 시스템에 SSH로 접속할 수 있도록 하고 싶습니다. 먼저 sshd를 자동으로 가장 높은 우선순위로 설정하기 위해 cron 작업을 설정하려고 시도했지만 아무런 효과가 없었으며 일상적으로 SSH를 시작할 수 없거나 SSH 프롬프트가 사용할 수 없을 정도로 느립니다.
답변1
전용 사용자로 프로세스를 실행하고 다음을 통해 설정하세요.cgroup:
/etc/cgconfig.conf
:
group limitedram {
memory {
memory.limit_in_bytes = 6442450944;
}
}
그리고 /etc/cgrules.conf
:
serviceuser memory limitedram/
이는 메모리 사용량을 serviceuser
6GB로 제한합니다.