내 서버는 내가 제어할 수 없는 수십 개의 프로세스(주로 모니터링 소프트웨어)를 실행합니다.
내 애플리케이션 로그에 따르면 일부 타사 프로세스가 너무 많은 메모리를 할당하려고 시도하여 시스템에 남아 있는 RAM과 스왑을 모두 사용하는 경우가 있습니다. 이 경우 Java 애플리케이션이 OOM과 충돌합니다. 간단한 메모리 소비 스크립트를 사용하여 이 상황을 재현할 수 있습니다.
나는 컴퓨터에서 실행되는 다른 소프트웨어를 제어할 수 없기 때문에 cgroup을 사용하여 타사 프로세스에 사용 가능한 메모리를 제한하기로 결정했습니다. 이것은 매우 잘 작동합니다.
내 문제는 OS/커널/핵심 시스템 프로세스를 식별하고 이를 타사 프로세스와 분리하는 것입니다.
이제 저는 타사 프로세스를 찾아 프로세스 명령줄의 몇 가지 일반적인 경로 패턴을 사용하여 메모리가 제한된 cgroup에 넣으려고 합니다.
내 애플리케이션을 루트 cgroup(무제한 메모리)에서 실행하고 다른 모든 프로세스(모든 OS 및 커널 프로세스 포함)를 RAM 및 SWAP 제한이 최대 1GB인 cgroup에 넣어도 괜찮은지 궁금합니다. (실제로는 스왑이 없습니다)
RHEL OS(커널 2.6.32-279.el6.x86_64)를 실행하는 데 1GB이면 충분하고 모든 시스템 프로세스에 사용 가능한 RAM을 제한해도 시스템 안정성에 영향을 미치지 않기를 바랍니다.