WEB WAS/WAS

[Tomcat] reloadable 옵션 및 주의사항

홍또~ 2020. 10. 6. 17:44

Tomcat에 변경된 소스를 업로드하면, 원래는 Tomcat을 재기동 해야 변경사항이 적용이 된다.

하지만 소스를 변경할때 마다 재기동하기엔 서버에 직접 접속해야하니, 여간 귀찮은일이 아닐 수 없다.

이것을 해결하기위해 Tomcat자체에서 server.xml을 통해 reloadable설정을 제공한다.

reloadable = true 옵션이면 일정 주기마다(15초간격) 루트경로의 class파일 변경여부를 확인하고,

자동으로 재기동하여 리로드시켜준다. true로 해놓았을 시 개발자들은 서버자체를 건들이지 않아도

소스가 반영이되니 상당히 편리한 기능이다.

하지만 주의할 점이 있다.

1. out of memory

리로드 될때 기존 클래스파일의 메모리가 해제되는것은 아니다. 기존 클래스파일의 메모리는 그대로 두고 신규 클래스파일의 메모리를 새롭게 할당하게된다. 결국, 클래스파일의 변경이 자주 있고 이것이 누적될 경우 heap memory부족으로 tomcat 오류가 발생한다. 따라서 메모리부족이 발생하기 전에 가끔 서버를 재기동해주긴 해야한다.

2. jenkins 배포시 오류

jenkins 배포가 진행되는 동안, ant빌드나 maven빌드를 통해 class파일이 변경되고 이때 서버에서 reloadable옵션이 true이면 서버가 자동 재기동되게 된다. 이때 배포과정에 민감한 솔루션이 포함되어있다면 에러를 일으킬 수 있으니, 웬만하면 jenkins로 배포시,  reloadable옵션은 false로 두고 jenkins 빌드스크립트로 tomcat재기동을 하는것을 추천한다.