프로세스가 실행되기 위해선 메모리에 올라가야합니다. (프로세스의 실행 과정에 대한 포스팅이 있으니 참고해주세요.)
이처럼 운영체제 환경에서 메모리는 모든 프로세스가 실행되기 위한 핵심 자원이며, 시스템 성능과 안정성에 직접적인 영향을 미칩니다.
하지만 메모리가 부족해진다면 서버는 느려지는 것에서 끝나지 않고 실행 중이던 프로세스가 강제로 종료되는 상황이 발생할 수 있습니다.
리눅스는 이러한 문제를 해결하기 위해 Swap과 같은 보조 메모리 영역을 활용하고, OOM Killer를 통해 시스템을 보호하는 메모리 관리 구조를 제공합니다.
이번 포스팅에서는 리눅스가 메모리를 어떻게 관리하고, 부족한 상황에서 어떤 방식으로 대응하는지 알아보겠습니다.
리눅스 명령어 free
free 명령어를 통해 리눅스에서 전체 메모리에 대한 사용 현황을 아래와 같이 확인할 수 있습니다.

위 캡쳐본은 버추얼박스에 설치한 리눅스에서 free 명령어를 실행한 결과입니다. 단위는 메가바이트입니다.
- Mem(RAM)
- total : 전체 메모리 용량
- used: 현재 사용 중인 메모리(캐시까지 포함된 값)
- free: 완전히 비어있는 메모리
- buff/cache: 캐시 및 버퍼로 사용 중인 메모리
- available: 실제로 사용할 수 있는 메모리
* buff/cache의 역할
buff/cache는 디스크 입출력 성능을 개선하기 위한 공간입니다. 한 번 읽은 파일이나 데이터를 메모리에 저장해두고, 이후 동일한 요청이 들어올 경우 디스크가 아닌 메모리에서 빠르게 제공할 수 있도록 합니다.
리눅스는 메모리를 가능한 효율적으로 사용하는 것을 목표로 하기 때문에, 사용되지 않는 메모리를 그대로 두지 않고 buff/cache 영역으로 활용하여 시스템 성능을 향상시킵니다.
즉, 비어 있는 메모리를 유지하는 것보다 캐시로 활용하는 것이 더 효율적이며, 이 영역은 필요 시 언제든지 반환되어 다른 프로세스가 사용할 수 있습니다.
프로그램 실행이 계속되면서 available 메모리가 점점 감소하게 되고, 일정 수준 이하로 떨어지면 시스템은 더 이상 RAM만으로 모든 작업을 처리하기 어려워집니다.
이때 리눅스는 부족한 메모리를 보완하기 위해 Swap 영역을 활용하게 됩니다.
Swap이란?
리눅스는 물리적 메모리의 한계를 극복하기 위해 운영체제의 메모리 관리 기법인 스와핑(Swapping)을 실무적으로 구현하여 사용합니다. 이것이 시스템에 메모리(RAM)가 부족할 경우 하드디스크의 일부 공간을 활용하여 작업을 도와주는 Swap영역입니다.
스와핑은 프로세스를 주기억장치에서 보조기억장치로, 또는 그 반대로 일시적으로 이동시키는 기법입니다.
이를 통해 운영체제는 제한된 메모리를 효율적으로 관리하고 다중프로그래밍 환경에서 여러 프로세스를 동시에 실행할 수 있습니다.

- Swap out : 프로세스를 실행할 수 없을 때까지 실행된 후, 프로세스가 메모리에서 제거되는 작업
- Swap in : 다음 실행될 프로세스가 적재되는 작업
스왑 영역은 하드디스크 상에 위치하여 RAM에 접근하는 것보다 접근 속도가 느립니다. 따라서 스왑 사용량이 과도하면 시스템 속도가 느려질 수 있습니다.
OOM(Out Of Memory) Killer
만약 Swap 영역까지 가득 차서 더 이상 메모리를 사용할 수 없어지면, 리눅스 커널은 시스템 전체가 멈추는 것을 막기 위해 OOM Killer를 호출합니다. 이를 통해 메모리 부족으로 인한 시스템 충돌이나 응답 없음 현상을 방지할 수 있습니다.
- 작동 원리 : 커널은 내부적인 OOM 점수 산정 방식(oom_score)을 통해 시스템 운영에 지장을 덜 주면서도 메모리를 많이 점유하고 있는 프로세스를 강제로 종료(kill)시킵니다.
따라서 중요 프로세스가 의도치 않게 종료될 수 있으며 이로 인한 데이터 손실 등 문제가 발생할 수 있습니다.
이 경우 스왑 공간 확장, OOM Killer 구성 조정, 메모리 사용량 최적화와 같은 수동 개입이 필요할 수 있습니다.
엄밀히 말하면 현대 리눅스는 프로세스를 통째로 옮기는 고전적 스와핑보다는, 필요한 조각만 효율적으로 옮기는 페이징(Paging) 기반의 스와핑을 사용합니다.
그렇다면 리눅스는 어떤 메커니즘을 통해 이 조각들을 나누고, 가짜 메모리를 진짜처럼 사용하게 만드는 걸까요? 현대 운영체제 메모리 관리의 정점이라 불리는 가상 메모리와 페이징 기법에 대해 다음 포스팅에서 자세히 다뤄보겠습니다.
학습용으로 작성한 포스팅이므로 오류가 있을 수 있습니다.
잘못된 내용이나 보완이 필요한 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
궁금한 점도 편하게 남겨주세요.
출처
- Linux Out of Memory killer
https://neo4j.com/developer/kb/linux-out-of-memory-killer/
- Swapping in Operating System
https://www.geeksforgeeks.org/operating-systems/swapping-in-operating-system/
'LINUX' 카테고리의 다른 글
| 프로세스는 어떻게 실행되는가(3/3): CPU 스케줄링과 컨텍스트 스위칭 (0) | 2026.04.15 |
|---|---|
| 프로세스는 어떻게 실행되는가(2/3): 메모리, PCB, 스레드 이해하기 (0) | 2026.04.15 |
| 프로세스는 어떻게 실행되는가(1/3): 프로세스 생성 과정 (0) | 2026.04.13 |
| 리눅스 커널에 대하여 (1) | 2026.03.27 |
| 리눅스 부팅 과정: 전원 버튼을 누르면 일어나는 일 (0) | 2026.03.26 |