EC2 메모리 압박 분석 — 1.9GB RAM에서 7.1GB Committed_AS가 발생하는 구조
초록
AWS EC2 t2.small(1.9GB RAM) 인스턴스에서 Swap이 90% 이상 소진되는 현상을 분석했다. ps, free, /proc/meminfo를 통해 프로세스별 메모리 점유를 측정한 결과, Committed_AS가 물리 자원(RAM+Swap=3.9GB)의 약 1.8배인 7.1GB에 달했다. claude(18%), headroom proxy(8%), RHMS uvicorn(6.7%), mojo-slack-bot(4.9%) 등 상시 운영 서비스들의 누적이 원인이었다. 단기 처방으로 swapfile을 2GB에서 4GB로 확장하고, 장기적으로는 인스턴스 업그레이드 또는 서비스 정리를 권고한다.
현상
EC2 인스턴스에서 free -h 실행 결과 Swap이 1.7GB/2.0GB(85%) 소진된 것을 확인했다. 가용 RAM은 682MB로 사용 가능한 수준이었으나, Swap이 거의 꽉 찬 것은 시스템이 이미 물리 메모리 한계를 넘어 동작 중임을 의미한다.
total used free available
Mem: 1.9Gi 1.0Gi 174Mi 682Mi
Swap: 2.0Gi 1.8Gi 240Mi
원인 분석
ps aux --sort=-%mem으로 프로세스별 메모리 점유율을 측정했다.
| 점유율 | PID | 프로세스 |
|---|---|---|
| 18.0% | 3884156 | claude (현재 세션) |
| 8.2% | 3741855 | headroom MCP proxy |
| 6.7% | 2321455 | RHMS uvicorn (port 8090) |
| 4.9% | 31396 | mojo-slack-bot |
| 4.0% | 3884169 | headroom mcp serve |
| 3.9% | 1577 | MariaDB |
| 2.4% | 3848100 | thesis-web uvicorn |
Committed_AS 과잉 할당
/proc/meminfo의 Committed_AS: 7257732 kB는 현재 프로세스들이 커널에 예약한 가상 메모리 총량이다. 물리 자원(RAM 1.9GB + Swap 2.0GB = 3.9GB)의 약 1.8배에 달한다. Linux의 메모리 과잉 커밋(overcommit) 정책 덕분에 즉시 OOM이 발생하지 않지만, 실제 메모리 압박이 가중되면 OOM Killer가 프로세스를 강제 종료할 위험이 있다.
잠재적 원인 — .copilot 세션 잔해
분석 과정에서 ~/.copilot/session-state/에 4개의 세션 디렉토리가 발견됐다. 그 중 1개(PID 3872007)만 실제로 port 8765에서 HTTP 서버를 운영 중이었고, 나머지 3개는 프로세스 없이 디스크만 점유하는 잔해였다. 3개 디렉토리를 삭제해 디스크를 정리했다.
조치
단기: Swap 2GB → 4GB 확장
기존 swap을 끄면 RAM에 여유가 없어 OOM Killer가 swapoff 프로세스 자체를 종료시킨다. 따라서 기존 /swapfile(2GB)은 유지한 채 /swapfile2(2GB)를 추가해 합산 4GB를 달성했다.
sudo dd if=/dev/zero of=/swapfile2 bs=1G count=2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2
echo "/swapfile2 none swap sw 0 0" | sudo tee -a /etc/fstab
확장 후:
Mem: 1.9Gi 769Mi 933Mi 989Mi available
Swap: 4.0Gi 2.0Gi 2.0Gi free
장기 권고
- EC2 인스턴스 업그레이드: t2.small(1.9GB) → t2.medium(4GB RAM). RAM이 2배로 늘어 swap 의존도가 크게 줄어든다.
- 서비스 정리: RHMS가 systemctl 밖에서 실행 중인 점을 포함해, 항상 켜둘 필요 없는 서비스를 정리한다.
- headroom proxy 단일화: headroom 관련 프로세스가 2개(proxy + mcp serve) 존재하는 구조를 검토한다.
결론
1.9GB RAM 인스턴스에서 다수의 AI 에이전트 서비스를 동시 운영하면 메모리 압박이 필연적으로 발생한다. Swap 확장은 즉시 적용 가능한 안전망이지만, Swap은 디스크 기반으로 RAM 대비 수십 배 느리다. 서비스 수가 증가함에 따라 인스턴스 업그레이드를 검토해야 한다.
