서버 RAM 용량 추정기
동시 접속·워커 수·프로세스당 메모리로 웹 서버에 필요한 RAM 용량을 추정합니다.
웹·API 서버에 RAM을 얼마나 잡아야 할지 감이 안 잡힐 때 쓰는 서버 RAM 용량 추정기입니다. 워커 프로세스 수, 워커 1개당 메모리, OS 기본 오버헤드, 캐시·DB 예비, 안전 여유(%)를 넣으면 권장 메모리를 계산하고 1·2·4·8·16·32·64GB 중 가장 가까운 상위 RAM 등급으로 올림해 추천합니다.
VPS·클라우드 인스턴스 사이즈를 고르거나 컨테이너에 메모리 한도를 설정하기 전에 빠르게 어림하기 좋습니다. 트래픽이 늘었을 때의 비용까지 함께 보려면 대역폭 비용 계산기, 가용성 목표와 다운타임 환산은 SLA 계산기를 함께 쓰세요.
| 워커 합계 (MB) | 1,024 |
|---|---|
| 소계 (MB) | 2,048 |
| 여유 포함 (MB) | 2,457.6 |
| 권장 RAM 등급 | 4 GB |
계산 방식
이 도구는 다음 순서로 권장 메모리를 구합니다.
- 워커 합계 = 워커 수 × 워커당 메모리(MB)
- 소계 = OS 오버헤드 + 워커 합계 + 캐시·DB 예비
- 여유 포함 = 소계 × (1 + 안전 여유% ÷ 100)
- 권장 등급 = 여유 포함 값을 1·2·4·8·16·32·64GB 중 바로 위 등급으로 올림
워커당 메모리는 어떻게 정하나
워커 1개당 메모리는 추정이 아니라 실제 앱 프로파일링에서 나와야 정확합니다. 운영 중 프로세스의 RSS를 관측하고 피크 시 사용량에 여유를 더해 잡으세요. PHP-FPM·Gunicorn·Node 클러스터처럼 멀티프로세스 모델은 워커 수 × 워커당 메모리가 그대로 더해집니다.
캐시와 DB가 더 클 수 있다
같은 서버에서 데이터베이스나 인메모리 캐시(Redis·Memcached)를 돌리면 이쪽이 워커 합계보다 메모리를 훨씬 많이 잡아먹는 경우가 흔합니다. 예를 들어 Redis 캐시에 4GB를 할당했다면 캐시·DB 예비를 4096MB로 넣어 반영하세요. DB를 별도 서버로 분리하면 이 예비를 0으로 두면 됩니다.
스택별 워커당 메모리 어림값
정확한 값은 프로파일링이 진리지만, 처음 잡을 때 출발점으로 쓸 만한 워커 1개당 RSS 어림값입니다. 라이브러리· 앱 코드 양에 따라 크게 달라지므로 운영 관측값으로 반드시 보정하세요.
| 스택 / 모델 | 워커당 RSS 어림 | 메모 |
|---|---|---|
| PHP-FPM (Laravel/WordPress) | 40~120MB | pm.max_children가 곧 워커 수 |
| Gunicorn + Django/Flask | 80~250MB | ML/판다스 적재 시 급증 |
| Node.js 클러스터 | 60~150MB | 힙 한도는 --max-old-space-size로 별도 제한 |
| Puma (Ruby/Rails) | 120~400MB | 스레드보다 프로세스(worker)당 메모리가 큼 |
| Spring Boot (JVM) | 300~700MB | 보통 워커 1개, 힙은 -Xmx가 결정 |
예시로 따라가기
PHP-FPM으로 워커당 80MB, 워커 8개, OS 오버헤드 512MB, 같은 서버의 Redis에 1024MB, 안전 여유 25%를 넣었다고 합시다. 워커 합계는 8 × 80 = 640MB, 소계는 512 + 640 + 1024 = 2176MB, 여유 포함은 2176 × 1.25 = 2720MB(약 2.66GB)입니다. 등급은 바로 위인 4GB로 올림되어 4GB 인스턴스를 추천합니다. 여기서 워커를 8 → 16으로 늘리면 여유 포함이 약 3.5GB가 되어도 여전히 4GB 등급이지만, 16 → 24로 가면 8GB 등급으로 점프하는 식으로 등급이 계단처럼 변합니다.
흔한 실수 / 함정
- 워커 수를 vCPU 수와 무조건 1:1로 잡는 것. PHP-FPM의
pm.max_children나 Gunicorn 워커는 코어보다 훨씬 많게 설정되는 경우가 흔하므로, 실제 설정 파일의 워커 수를 그대로 넣어야 합니다. - JVM·Node 힙을 워커당 메모리에 또 더하는 것.
-Xmx·--max-old-space-size로 잡은 힙은 그 프로세스의 RSS 안에 이미 포함되므로 별도 항목으로 중복 계산하지 마세요.