리눅스 메모리 구조 — 프로세스 메모리와 시스템 메모리 이해

조회수 30

리눅스에서 메모리는 단순히 “사용량”만 보는 것이 아니라 구조를 이해해야 한다.
프로세스 메모리와 시스템 메모리 구조를 함께 봐야 성능 문제를 정확히 판단할 수 있다.

특히 메모리 부족, OOM, swap 발생 같은 문제는 구조를 모르면 원인을 찾기 어렵다.
리눅스 메모리는 크게 프로세스 관점과 시스템 관점으로 나눠 이해한다.

1. 프로세스 메모리 구조

각 프로세스는 독립된 가상 메모리 공간을 가진다.
이 공간은 다음과 같은 영역으로 나뉜다.

flowchart TD A["Stack (스택)"] B["Heap (힙)"] C["Data (데이터 영역)"] D["Text (코드 영역)"] A --> B --> C --> D

Text (코드 영역)

실행 파일의 코드가 저장되는 영역이다.
읽기 전용이며 여러 프로세스가 공유할 수 있다.

Data 영역

전역 변수와 static 변수가 저장되는 영역이다.
프로그램 실행 시 할당되고 종료 시 해제된다.

Heap (힙)

동적으로 메모리를 할당하는 영역이다.
malloc, new 같은 연산이 이 영역을 사용한다.

프로그램 실행 중 계속 증가할 수 있으며, 개발자가 직접 관리해야 한다.
메모리 누수가 발생하기 쉬운 영역이다.

Stack (스택)

함수 호출 시 생성되는 지역 변수와 호출 정보가 저장된다.
함수가 끝나면 자동으로 해제된다.

Stack은 크기가 제한되어 있어 너무 깊은 재귀 호출 시 Stack Overflow가 발생한다.

2. 가상 메모리(Virtual Memory)

리눅스는 모든 프로세스에 가상 메모리를 제공한다.
실제 물리 메모리보다 큰 주소 공간을 사용할 수 있다.

필요한 부분만 물리 메모리에 올리고 나머지는 디스크에 저장한다.
이때 사용하는 것이 swap이다.

flowchart LR A["Virtual Memory"] B["Physical Memory (RAM)"] C["Swap (Disk)"] A --> B A --> C

가상 메모리 덕분에 여러 프로세스를 동시에 안정적으로 실행할 수 있다.

3. 시스템 메모리 구조

시스템 전체 관점에서 메모리는 다음과 같이 나뉜다.


free -m

출력 항목은 다음 의미를 가진다.

  • total — 전체 메모리
  • used — 사용 중인 메모리
  • free — 완전히 비어 있는 메모리
  • buff/cache — 캐시로 사용 중인 메모리
  • available — 실제 사용 가능한 메모리

리눅스는 남는 메모리를 캐시로 적극 활용한다.
따라서 free 값이 낮아도 available이 충분하면 문제가 없다.

4. Cache와 Buffer

리눅스는 디스크 접근 속도를 줄이기 위해 메모리를 캐시로 사용한다.
이 영역은 필요하면 언제든 회수된다.

  • Buffer — 파일 시스템 메타데이터 캐시
  • Cache — 파일 데이터 캐시

캐시가 많다고 해서 메모리가 부족한 것은 아니다.
오히려 성능을 위해 정상적으로 사용되는 상태다.

5. Swap

Swap은 물리 메모리가 부족할 때 디스크를 메모리처럼 사용하는 공간이다.
하지만 디스크는 RAM보다 훨씬 느리기 때문에 성능이 크게 저하된다.


swapon -s

Swap 사용량이 지속적으로 증가하면 메모리 부족 상태를 의미한다.
이 경우 애플리케이션 메모리 사용량을 점검해야 한다.

6. OOM (Out Of Memory)

메모리가 완전히 부족해지면 리눅스는 OOM Killer를 실행한다.
메모리를 많이 사용하는 프로세스를 강제로 종료한다.


dmesg | grep -i "killed process"

운영 환경에서 갑자기 프로세스가 종료되면 OOM을 의심해야 한다.

7. 실무 점검 방법

  • top / htop으로 프로세스별 메모리 확인
  • free -m으로 전체 메모리 상태 확인
  • swap 사용 여부 점검
  • 로그로 OOM 발생 여부 확인

메모리 문제는 단순 수치보다 “증가 패턴”을 보는 것이 중요하다.
지속적으로 증가하면 메모리 누수 가능성이 있다.

한 줄 요약

리눅스 메모리는 프로세스 단위(Heap, Stack 등)와 시스템 단위(Cache, Swap)로 나뉜다. free 값만 보지 말고 available, cache, swap, OOM 여부까지 함께 확인해야 정확한 상태를 판단할 수 있다.

댓글 0

  • 첫 번째 댓글을 남겨보세요.