본문 바로가기
AWS

[AWS]EC2 인스턴스 재부팅시 자바 + 톰캣의 메모리 초기화 이유

by 코딩공장공장장 2021. 2. 1.

서버도 일종의 컴퓨터입니다. 

 

일반 컴퓨터와 다르게 서버는 24시간 돌아가죠. 구체적으로 따지면 24시간이 아니라 서버를 시작하고 종료할때까지

 

쉬지않고 돌아가는거죠. 

 

이럴 경우 서버에는 메모리가 쌓이게 됩니다. 

 

조금 구체적으로 설명하면,

 

사용자들이 사용하고 이제는 사용하지 않는 자바의 객체들이 많이 있을것입니다.

 

예를 들어 내 웹사이트에 접속하고 웹사이트에서 나가더라도 접속자가 사용한 객체들은 여전히 남아 있습니다.

 

자바의 사용하지 않는 객체를 제거해주는 가비지컬렉터는 사용할 가능성이 낮다고 판단되는 객체를 제거합니다.

 

즉, 제거되지 않는 객체는 사용할 가능성이 있다라고 해석할 수 도 있으며 이는 사용중에 있다라고도 판단할수 있는거죠.

 

이렇게 객체들이 많이 쌓이면 메모리가 이 객체를 관리해야하기 때문에

 

서버에 메모리가 계속 쌓이는 것이죠.

 

이럴 경우, 서버를 재부팅하면 메모리가 초기화 됩니다.

 

우리가 실제로 컴퓨터를 종료시키면 어떤결과가 초래됩니까?

 

내가 게임을 돌리고 있고, 인터넷을 켜놓은 환경이라고 하더라도 

 

컴퓨터를 재부팅하면 게임도 인터넷도 모두 종료된 상태입니다. 

 

이처럼 서버를 재부팅하면 객체도 모두 종료가 됩니다. 

 

이에따라 메모리도 초기화가 되는 것입니다.

 

메모리가 초기화 되는 이유는 대략 이러합니다만, 

 

실제 서버를 관리할때 이는 좋은 방법이 아닙니다.

 

서버의 고가용성(지속적으로 정상운영 가능)을 목표로 관리하는 서버 관리자들이 메모리 문제를 

 

재부팅으로 해결하는것은 결코 바람직하지 않죠.

 

재부팅시 접속자들이 사용에 불편함을 느낄수 있기 때문이죠.

 

제가 사용하고 이는 클라우드 환경에서는 서버를 한대를 사용하는게 아니라

 

두대 이상을 사용하여 한대의 서버가 메모리가  가득찬다면

 

다른 서버로 접속환경을 돌리고 메모리가 가득찬 서버를 교체 해준다거나 

 

재부팅하는것도 좋은 방법이 될 수 있겠죠. 

 

저 또한 아직은 인스턴스 하나로 관리하고 있어 이 기능을 사용하고 있지는 않지만

 

제 서버의 고가용성을 위해 아마존의 Auto Scaling 기술을 사용하여

 

위의 방법으로 운영할 계획에 있습니다.

 

클라우드 서버 관리를 처음 시작하시는 분들이라면 위와 같은 방법으로도 좋은 해결방법이 될 것입니다.

 

 

또한 더 좋은 방법이 있거나 제가 설명한 개념에 잘못된 부분이 있다면 댓글로 소통해주시면 감사하겠습니다.

반응형