메모리는 책상, 디스크는 책장입니다.
비유 하나로 시작합시다.
메모리(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 결과에서 서버에 메모리 여유가 있는지 판단할 때 봐야 할 숫자는?
해설 리눅스는 남는 메모리를 캐시로 알뜰히 씁니다. 그래서 free 는 항상 작아 보여요. 캐시는 필요하면 즉시 반환되므로, 진짜 여유는 available 입니다.
🤔 확인 문제
가상 메모리가 없다면 생길 문제로 가장 알맞은 것은?
해설 가상 메모리는 격리를 만들어 줍니다. 각 프로세스가 자기만의 주소 공간을 갖기 때문에 남의 메모리를 볼 수도, 망칠 수도 없습니다. 앱 하나가 죽어도 나머지가 멀쩡한 이유죠.
🤔 확인 문제
서버가 죽지는 않았는데 응답이 몇십 초씩 걸린다면 가장 먼저 의심할 것은?
해설 스왑은 디스크를 메모리처럼 쓰는 비상 수단이라 수백 배 느립니다. free -h 에서 Swap used 가 크다면 거의 확실합니다. 메모리를 늘리거나, 범인 프로세스를 찾아야 합니다.