시스템의 물리 메모리가 고갈될 위기에 처했을 때, 리눅스 OOM Killer는 어떤 기준으로 프로세스를 선택하여 종료시키며, OOM Killer의 동작 방식이 애플리케이션의 안정성과 가용성에 미치는 영향은 무엇입니까? OOM Killer의 동작을 제어하거나 회피할 수 있는 OS 수준의 설정 및 설계 기법에 대해 논하시오.
힌트 · `oom_score`, `oom_score_adj`를 통한 우선순위 제어, `overcommit_memory` 설정, 그리고 메모리 할당 실패 시 애플리케이션의 견고한 처리 방안을 포함해야 합니다.
모범답안
네, 말씀하신 질문에 대해 답변드리겠습니다.
리눅스 OOM Killer는 시스템 메모리가 부족할 때 프로세스를 강제 종료하여 시스템을 보호하는 역할을 합니다. 종료 대상 선정 기준은 주로 oom_score라는 값인데, 이 값은 프로세스의 메모리 사용량, 실행 시간, 권한 등을 종합적으로 고려하여 계산됩니다. oom_score가 높을수록 종료될 가능성이 커집니다.
OOM Killer는 시스템 전체의 안정성을 확보하지만, 중요한 애플리케이션이 예기치 않게 종료될 수 있어 가용성에 영향을 미칠 수 있습니다.
OOM Killer의 동작을 제어하기 위해 oom_score_adj 값을 조정할 수 있습니다. 이 값을 낮추면 해당 프로세스의 종료 우선순위를 낮출 수 있습니다. 또한, /proc/[pid]/oom_adj 파일을 직접 수정하여 프로세스별 OOM 점수를 조절할 수도 있습니다.
OS 수준에서는 vm.overcommit_memory 설정을 통해 메모리 할당 정책을 변경할 수 있습니다. 애플리케이션 수준에서는 메모리 할당 실패를 감지하고 graceful shutdown을 수행하여 데이터 손실을 최소화하는 것이 중요합니다. 예를 들어, 메모리 할당에 실패했을 때 예외를 처리하고, 현재 상태를 저장한 후 안전하게 종료하는 방식을 고려할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 운영체제 면접 질문
- 멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 세마포어(Semaphore)와 뮤텍스(Mutex)의 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 시나리오를 제시해주세요.
- NUMA(Non-Uniform Memory Access) 아키텍처 환경에서 애플리케이션의 메모리 접근 성능을 최적화하기 위한 OS 수준의 고려사항과 구체적인 전략에 대해 설명해 주십시오. 특히, 메모리 할당 정책과 스케줄링 관점에서 어떤 최적화 기법을 적용할 수 있을까요?
- 리눅스 커널의 Completely Fair Scheduler(CFS)는 공정성을 유지하면서도 처리량을 극대화하기 위해 어떤 핵심적인 원리들을 적용하고 있습니까? 특히, `vruntime`과 레드-블랙 트리를 활용한 스케줄링 큐 관점에서 CFS의 동작 방식을 심층적으로 설명해 주십시오.
- ZFS나 Btrfs와 같은 Copy-on-Write(CoW) 파일 시스템은 기존 저널링 파일 시스템과 비교했을 때 데이터 무결성, 스냅샷, 데이터 보호 측면에서 어떤 근본적인 장점과 단점을 가집니까? CoW 파일 시스템의 내부 동작 원리를 설명하고, 대규모 데이터 환경에서 CoW 파일 시스템을 효과적으로 활용하기 위한 설계 전략을 제시해 주십시오.
- 리눅스 커널의 다양한 I/O 스케줄러(예: Noop, Deadline, CFQ, MQ-deadline)는 각각 어떤 특성과 목표를 가지고 있으며, 특정 워크로드(예: 데이터베이스, 웹 서버, 가상화 환경)에서 최적의 성능을 얻기 위해 어떤 I/O 스케줄러를 선택하고 튜닝해야 하는지 구체적인 근거와 함께 설명해 주십시오.
- Read-Copy Update(RCU)는 다중 코어 환경에서 읽기 중심의 데이터 구조에 대한 동시성 제어를 위해 널리 사용되는 기법입니다. RCU의 동작 원리(읽기 측, 쓰기 측)를 상세히 설명하고, 기존 락 기반 동기화 방식과 비교했을 때 RCU가 제공하는 성능상의 이점과 한계점은 무엇인지 논해 주십시오.