Translate

[Tomcat] Spring 으로 제작된 Web Application 구동 시 'DefaultListableBeanFactory - Pre-instantiating singletons' 로그에서 너무 오래 걸리는 경우



문제

로컬에 프로젝트 소스를 Tomcat 에 올려서 기동 시 시간이 너무 오래 걸린다.
(대략 15분 정도!? 서버에서의 기동시간은 빠르다)


아래는 Tomcat 기동시의 로그
(약 15분 정도의 간격이 있지만 해당 시점에는 CPU/Disk 의 사용량이 많지 않고 그냥 아무것도 하지 않는 느낌..)


[2015.01.28 14:04:54] *INFO * DispatcherServlet - FrameworkServlet 'dispatcher': initialization started
[2015.01.28 14:04:54] *INFO * XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'dispatcher-servlet': startup date [Wed Jan 28 14:04:54 KST 2015]; root of context hierarchy
[2015.01.28 14:04:54] *INFO * XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/spring/base-config.xml]
[2015.01.28 14:04:55] *INFO * XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/spring/mvc-config.xml]
[2015.01.28 14:04:56] *INFO * XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/spring/jdbc-config.xml]
[2015.01.28 14:04:56] *INFO * XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/spring/datasource-config.xml]
[2015.01.28 14:04:56] *INFO * XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/spring/message-config.xml]
[2015.01.28 14:04:56] *INFO * XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [config/spring/uri-config.xml]
[2015.01.28 14:04:56] *INFO * PropertyPlaceholderConfigurer - Loading properties file from class path resource [config/properties/jdbc-dev.properties]
[2015.01.28 14:04:57] *INFO * DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1f5726ec: defining beans [package_name~~~~~~~~~~~~~~~~~~~~~~~]; root of factory hierarchy
[2015.01.28 14:19:23] *INFO * PropertiesFactoryBean - Loading properties file from class path resource [config/properties/legacy-real.properties]
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/bla] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/bla.*] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/bla/] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV2] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV2.*] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV2/] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV3] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV3.*] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV3/] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV4] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV4.*] onto handler 'com.bla.bla.Controller'
[2015.01.28 14:19:24] *INFO * DefaultAnnotationHandlerMapping - Mapped URL path [/rest/blaV4/] onto handler 'com.bla.bla.Controller'







원인

DB연결 작업 시 너무 오래 걸린다.
- 상용 및 스테이징 서버는 사양 및 네트워크가 좋아서 커넥션 개수를 300개로 설정해도 문제가 없다.
   하지만 로컬 컴퓨터 및 개발용 DB서버는 사양도 낮고 멀리 떨어져 있다보니 초기 커넥션 개수를 높게 설정하면 커넥션을 맺는데 시간이 많이 소요된다.







방안

초기 커넥션 개수를 적절하게 낮게 설정한다.
(혼자 개발 및 테스트 용도이므로 많이 낮게 설정했다.)


기존


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="300"/>
<property name="maxActive" value="300"/>
<property name="maxWait" value="10000"/>
<property name="maxIdle" value="30"/>
<property name="minIdle" value="20"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="true"/>
<property name="validationQuery" value="SELECT 1 FROM DUAL"/>
</bean>




변경


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="2"/>
<property name="maxActive" value="10"/>
<property name="maxWait" value="10000"/>
<property name="maxIdle" value="5"/>
<property name="minIdle" value="1"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="true"/>
<property name="validationQuery" value="SELECT 1 FROM DUAL"/>
</bean>




댓글