2016-03-01 94 views
0

目前對我的應用程序使用Tomcat 6和hibernate 3,但我注意到啓動速度很慢,我只映射了大約40個實體。不知道這是Hibernate導致日誌如下:由於休眠狀態,Tomcat慢啓動

需要大約5分鐘爲以下:

任何想法?順便說一句我已經嘗試增加tomcat的內存

2016-03-01 09:18:53,933 INFO [main] SessionFactoryObjectFactory.addInstance(105) | Not binding factory to JNDI, no JNDI name configured 
2016-03-01 09:24:42,046 DEBUG [main] GnrlLookupView.<clinit>(37) | Registering view: GnrlLookupView 
2016-03-01 09:24:46,881 INFO [main] QuartzScheduler.<init>(209) | Quartz Scheduler v.1.6.0 created. 

Hibernate的配置:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource"> <ref bean="dataSource" /> </property> 
    <property name="mappingJarLocations"> 
     <list> 
      <value>WEB-INF/lib/*-hbm.jar</value> 
     </list> 
    </property> 
    <property name="lobHandler"> 
     <bean class="org.springframework.jdbc.support.lob.OracleLobHandler"> 
      <property name="nativeJdbcExtractor"> 
       <bean class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" /> 
      </property> 
     </bean> 
    </property>  
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.connection.SetBigStringTryClob">true</prop> 
      <prop key="hibernate.cache.use_second_level_cache">true</prop> <!-- Explicitly enabled 2nd level cache since upgrade to hibernate version 3.2.x --> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
      <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> 
     </props> 
    </property> 

    <property name="entityInterceptor"> 
     <ref bean="entityAuditInterceptor" /> 
    </property> 
</bean> 

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
     <ref local="sessionFactory" /> 
    </property> 
</bean>ref bean="entityAuditInterceptor" /> 
    </property> 
</bean> 

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
     <ref local="sessionFactory" /> 
    </property> 
</bean> 

更新:我已經啓用了更精細的記錄,來到下方,它打印出下面的5分鐘,任何想法?

SessionFactoryUtils.doGetSession(316) | Opening Hibernate Session 
2016-03-01 10:46:45,468 DEBUG [main] OracleLobHandler.getClobAsString(229) | Returning Oracle CLOB as string 
2016-03-01 10:46:45,468 DEBUG [main] OracleLobHandler.getClobAsString(229) | Returning Oracle CLOB as string 
2016-03-01 10:46:45,468 DEBUG [main] OracleLobHandler.getClobAsString(229) | Returning Oracle CLOB as string 
2016-03-01 10:46:45,483 DEBUG [main] OracleLobHandler.getClobAsString(229) | Returning Oracle CLOB as string 
2016-03-01 10:46:45,483 DEBUG [main] OracleLobHandler.getClobAsString(229) | Returning Oracle CLOB as string 
2016-03-01 10:46:45,483 DEBUG [main] OracleLobHandler.getClobAsString(229) | Returning Oracle CLOB as string 

2016-03-01 10:44:43,487 DEBUG [main] HibernateTemplate.flushIfNecessary(389) | Eagerly flushing Hibernate session 
2016-03-01 10:44:43,487 DEBUG [main] SessionFactoryUtils.closeSession(789) | Closing Hibernate Session 
2016-03-01 10:44:43,487 DEBUG [main] SessionFactoryUtils.doGetSession(316) | Opening Hibernate Session 
+1

是否爲所有軟件包(*)啓用了調試日誌記錄?如果是的話,也許嘗試重新運行跟蹤記錄的整個事情,也許它會揭示'SessionFactoryObjectFactory.addInstance(105)'和'GnrlLookupView之間的5-6分鐘內發生了什麼。 (37)'。 –

+0

您使用的是什麼版本的Java?你分配了多少內存?你有多少物理內存? – pczeus

+0

使用java 1.6,這是我在啓動時的配置:-server -Xms3072m -Xmx3072m -XX:NewSize = 1024m -XX:MaxNewSize = 1024m -XX:PermSize = 1024m -XX:MaxPermSize = 1024m -XX:+ DisableExplicitGC – mel3kings

回答

0

發現答案不是由於休眠設置,似乎在啓動時應用程序正在加載大量表並試圖保存在緩存中。