그냥저냥

뻘짓거리 | 리눅스에서 가상 메모리가 고갈되면 어떤 일이 벌어질까? (C언어 테스트) 본문

개발기

뻘짓거리 | 리눅스에서 가상 메모리가 고갈되면 어떤 일이 벌어질까? (C언어 테스트)

sync86 2026. 3. 6. 16:50
728x90
반응형

https://www.youtube.com/watch?v=tukn5z8eUMM

<영상 1> 리눅스에서 가상 메모리 끄고, 켜면서 실행 결과를 확인

들어가면서...

만약 프로그램이 가상 메모리를 전부 써버리면 OS는 어떻게 반응할까?" 막연한 추측보다는 직접 눈으로 확인하고 싶어 리눅스 환경에서 malloc 함수를 이용한 메모리 고갈 테스트를 진행해 보았습니다.

정확히 기억은 나지 않지만, 이 테스트를 진행할 때 리눅스 설치시에는 가상 머신의 메모리를 4GB로 설정 이후 1GB로 줄였던 것 같습니다.

실험 환경

  • OS: Linux (Ubuntu)
  • Memory: 1GB (빠른 결과를 위해 가상 머신 설정을 4GB에서 1GB로 제한)
  • Tool: C언어 (malloc 무한 루프 코드)

테스트 방법

실험은 크게 SWAP 영역의 유무free() 함수 호출 여부에 따라 세 가지 케이스로 나누었습니다.

  • SWAP 미설정
    • 메모리 해제(free) 안함 (a.c)
    • 메모리 해제(free) 수행 (b.c)
  • SWAP 설정
    • 메모리 해제(free) 안함 (c.c)
    • 메모리 해제(free) 수행 - 제외

테스트 결과

시나리오 결과 상세 분석
SWAP 미설정 / 해제 X 강제 종료 (Killed) 가용한 물리 메모리가 바닥나자, 리눅스 커널의 OOM Killer가 시스템 전체의 중단을 막기 위해 해당 프로세스를 강제 종료시켰습니다.
SWAP 미설정 / 해제 O 정상 유지 할당과 해제가 반복되므로 가용 메모리가 일정 수준으로 유지되어 종료되지 않습니다.
WAP 설정 / 해제 X 시스템 지연 발생 물리 메모리가 부족해지자 디스크의 일부인 SWAP 영역을 사용하기 시작합니다. 당장 종료되지는 않지만, 디스크 I/O로 인해 시스템이 매우 느려지는 현상을 보입니다.

마치며

실험을 통해 리눅스 커널이 메모리 자원을 보호하기 위해 얼마나 처절하게 노력하는지 확인할 수 있었습니다.

특히 OOM Killer의 동작을 직접 보니 메모리 관리와 free()의 중요성이 더욱 체감되네요.

자세한 코드는 아래 첨부한 영상에서 확인하실 수 있습니다.

728x90
반응형