2015-06-03 2 views
0

Я использую кеш второго уровня EhCache для кэширования и кеширования запросов. Все в порядке, но у процессора у меня есть 100% до 10 пользователей через JMeter. Если вы отключите EhCache, тогда процессор станет подходящим. У кого-нибудь есть мнение по этому поводу? Поэтому вместо повышения производительности EhCache загрузил мой процессор.Почему при использовании EhCache процессор достигает 100%?

Это моя зависимость:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>4.3.8.Final</version> 
    </dependency> 

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " 
     xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" 
     name="cacheManager" 
     monitoring="autodetect" dynamicConfig="true"> 

    <diskStore path="user.home/ehcacheEntriesStore" /> 

    <defaultCache maxEntriesLocalHeap="100" eternal="false" 
        timeToIdleSeconds="10" timeToLiveSeconds="10" diskSpoolBufferSizeMB="30" 
        maxEntriesLocalDisk="1000" diskExpiryThreadIntervalSeconds="1200" 
        memoryStoreEvictionPolicy="LRU" statistics="false"> 
     <persistence strategy="localTempSwap"/> 
    </defaultCache> 

    <cache name="serviceCache" 
     maxBytesLocalHeap="500M" 
     eternal="false" 
     timeToIdleSeconds="300" 
     overflowToDisk="true" 
     maxElementsOnDisk="1000" 
     memoryStoreEvictionPolicy="LRU"/> 

    <cache name="org.hibernate.cache.StandardQueryCache" 
      maxEntriesLocalHeap="50000" 
      eternal="false" 
      timeToLiveSeconds="300"> 
     <persistence strategy="localTempSwap"/> 
    </cache> 
    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache" 
      maxEntriesLocalHeap="50000" eternal="true"> 
     <persistence strategy="localTempSwap"/> 
    </cache> 
</ehcache> 

persistence.xml

<properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL9Dialect"/> 
    <property name="hibernate.transaction.jta.platform" 
       value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/> 
    <property name="hibernate.hbm2ddl.auto" value="update"/> 
    <property name="hibernate.show_sql" value="true"/> 

    <property name="hibernate.cache.region.factory_class" 
       value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/> 
    <property name="hibernate.cache.use_second_level_cache" value="true"/> 
    <property name="hibernate.cache.use_query_cache" value="true"/> 
    <property name="net.sf.ehcache.configurationResourceName" value="ehcache.xml"/> 
    <property name="hibernate.cache.default_cache_concurrency_strategy" value="transactional"/> 
    <property name="hibernate.max_fetch_depth" value="4"/> 
    <property name="hibernate.auto_close_session" value="true"/> 
    <!--<property name="hibernate.transaction.flush_before_completion" value="true"/>--> 
    <property name="hibernate.transaction.auto_close_session" value="true" /> 
    <property name="hibernate.c3p0.timeout" value="30" /> 

    <!--<property name="hibernate.generate_statistics" value="true"/>--> 
    <!--<property name="hibernate.cache.use_structured_entries" value="true"/>--> 

</properties 

>

+0

В общем, это хорошая новость, вы достигли почти идеального использования процессора. :) Однако, если это замедляет ваше приложение, вам следует изучить его с помощью профилировщика и обновить вопрос своими выводами. –

+0

Я использую профайлер, чтобы найти следующий http://snag.gy/kRpDI.jpg. – Fudji

ответ

0

Для Ehcache 3.x, это ошибка , Статистика кэша threadpool создает новый поток для каждой статистики. Таким образом, сам поток работает не так, но ОС потребляет большинство процессоров для создания этого потока.

Это должно быть зафиксировано в более поздних версиях, но временный обходной путь, чтобы установить системное свойство org.ehcache.statisticsExecutor.poolSize в 1

Ref: https://github.com/ehcache/ehcache3/issues/387

Смежные вопросы