9강 / 20강

메모리 — 좁은 책상을 나눠 쓰기

가상 메모리, 스왑, 그리고 서버가 죽는 이유

메모리 — 좁은 책상을 나눠 쓰기
메모리는 책상, 디스크는 책장입니다.

비유 하나로 시작합시다.

🪑
책상 (RAM)
좁지만 아주 빠름. 지금 보는 책만 올려 둠
📚
책장 (디스크)
넓지만 느림. 안 보는 책은 여기
🧑‍💼
사서 (OS)
필요한 책을 꺼내 오고 안 쓰는 건 꽂아 둠

메모리(RAM)는 디스크보다 수백 배 빠릅니다. 대신 훨씬 좁고 비싸요. 그래서 프로그램은 지금 필요한 부분만 메모리에 올려 두고 씁니다.

이 서버의 책상이 얼마나 넓고, 얼마나 찼는지
bash 내 가상 Ubuntu 서버에서 실행
total전체 메모리이 서버는 약 2GB
used지금 쓰는 중프로세스들이 차지한 양
buff/cache미리 읽어 둔 것필요하면 즉시 내줄 수 있음
available진짜 여유이 숫자를 보세요
Swap디스크를 메모리처럼모자랄 때 쓰는 비상 공간

가상 메모리 — 모두에게 "전부 네 것"이라고 속이기

여기서 운영체제의 가장 우아한 속임수가 등장합니다.

프로세스 A와 B가 둘 다 "내 메모리 0번지"에 값을 씁니다. 충돌할까요? 안 합니다. 두 프로세스가 말하는 0번지는 서로 다른 진짜 위치이기 때문입니다.

각 프로세스는 자기만의 가상 주소를 갖고, 커널이 그것을 진짜 주소로 몰래 바꿔 줍니다. 이걸 가상 메모리(virtual memory)라고 해요.

가상 메모리 덕분에
A의 0번지 → 진짜 4096번지
B의 0번지 → 진짜 8192번지
서로의 메모리를 볼 수도 없습니다
만약 없었다면
A가 B의 비밀번호를
메모리에서 그냥 읽음
앱 하나가 터지면 전체가 터짐

🎮 메모리 실험실

프로세스를 만들어 메모리를 채워 보세요. 가득 차면 무슨 일이 벌어지는지, 스왑이 어떻게 버텨 주는지, 그러다 결국 OOM Killer 가 등장하는 장면까지 볼 수 있습니다.

메모리 실험실 — 채우고, 스왑하고, 결국 누군가 죽습니다
불러오는 중…

스왑 — 책상이 좁으면 바닥에 쌓기

메모리가 모자라면 커널은 당장 안 쓰는 부분을 디스크로 옮깁니다. 이 공간이 스왑(swap)이에요. 덕분에 서버가 바로 죽지는 않습니다.

대신 엄청나게 느려집니다. 디스크는 메모리보다 수백 배 느리니까요. "서버가 안 죽었는데 응답이 30초씩 걸린다"면 스왑을 의심해야 합니다.

/proc 은 커널이 실시간으로 만들어 주는 가짜 파일들입니다
bash 내 가상 Ubuntu 서버에서 실행
🤔 확인 문제
free -h 결과에서 서버에 메모리 여유가 있는지 판단할 때 봐야 할 숫자는?
🤔 확인 문제
가상 메모리가 없다면 생길 문제로 가장 알맞은 것은?
🤔 확인 문제
서버가 죽지는 않았는데 응답이 몇십 초씩 걸린다면 가장 먼저 의심할 것은?