최근 관리를 요청 받은 회사의 사이트가 주기적으로 문제가 발생한다는 요청이 들어왔다.

 

해당 서버에 원격으로 Scouter를 설치해주고 며칠 지켜보기로 했다.

 

얼마 지나지 않아 서버가 다운되었다는 연락이 왔다.

 

스카우터를 살펴보니 Perm 사용률이 99%에 있었고

 

서버 설치당시에 설정을 확인해보니 톰캣에서 메모리에 대한 설정이 전혀 되어있지 않았다.

 

해당 서버에 평균 사용자는 3-40명정도가 지속적으로 유지가 되고 있었다.

 

평소 개발할때는 톰캣에 메모리 설정을 잡아주지 않아도 Out of Memory를 보는 경우가 잘 없어서 전혀 인지하지 못한 문제였다.

 

JVM의 기본 heap 메모리 사이즈는 64MB라서 사용자가 몰리기 시작했을때 메모리가 감당할 수 없는 상태였던것이었다.

 

해당 서버의 사양이 실제 RAM은 6GB로 설정이 되어있으나 윈도우가 32비트라서 4GB만 인식을 하고 있었고

 

기본적으로 사용하는 메모리가 2.2~2.3GB정도가 되어서 그걸 제외하고 메모리 설정을 해줘야 했다.

 

1GB를 메모리로 잡아줄 경우 RAM 사용량이 기본적으로 80%이상으로 올라갈거라 예측되었고,

 

1GB는 과하다는 판단으로 512MB에서 타협을 보았다.

 

-Xms, -Xmx 설정으로 최소와 최대를 모두 512MB에 맞춰주었다.

 

설정을 변경하고 다시 톰캣을 올렸을때는 기존에 99% 사용이었다면 이제는 15~20%정도 사용량을 보였고,

 

확실히 안정을 찾은듯한 모습이었다.

 

 

확실히 실제 환경을 겪어보지 않으면 모를 내용들이 많다.

 

지금은 3~40명의 사용자 규모를 겪은거지만

 

그 인원이 수백배 수천배라면?

 

동시에 수만명이 서버에 몰린다면...?

 

포털사이트에서는 하루 이용자가 적게는 수십만 많게는 수천만 이상이 될텐데

 

그럴때 서버가 얼마나 필요할지 어느정도의 사양의 서버가 있어야 버틸 수 있을까...?