Я программирую приложение с последней версией Spring Boot. Я недавно стал проблемой с растущей кучей, которая не может быть собрана мусором. Анализ кучи с Eclipse MAT показал, что в течение одного часа после запуска приложение кучи выросло до 630 МБ и с помощью SessionFactoryImpl Hibernate, используя более 75% всей кучи.Spring + Hibernate: Query Plan Cache Использование памяти
Is ищет возможные источники вокруг запроса план кэша, но единственным, что я нашел this, но это не разыгрывает. Эти свойства были установлены таким образом:
spring.jpa.properties.hibernate.query.plan_cache_max_soft_references=1024
spring.jpa.properties.hibernate.query.plan_cache_max_strong_references=64
запросов к базе данных все полученные с помощью магии запросов весной, используя интерфейсы хранилища, как in this documentation. С этим методом генерируется около 20 различных запросов. Нет других родных SQL или HQL. Образец:
@Transactional
public interface TrendingTopicRepository extends JpaRepository<TrendingTopic, Integer> {
List<TrendingTopic> findByNameAndSource(String name, String source);
List<TrendingTopic> findByDateBetween(Date dateStart, Date dateEnd);
Long countByDateBetweenAndName(Date dateStart, Date dateEnd, String name);
}
или
List<SomeObject> findByNameAndUrlIn(String name, Collection<String> urls);
, как, например, для использования IN.
Вопрос: Почему кеш-план запроса продолжает расти (он не останавливается, он заканчивается полной кучей) и как предотвратить это? Кто-нибудь сталкивался с подобной проблемой?
Версия:
- Spring загрузка 1.2.5
- Hibernate 4.3.10
Опубликовать код и конфигурацию. Вы настроили свойства, как указано в сообщении, с которым вы связались? При добавлении их в 'application.properties' убедитесь, что вы префикс их с' spring.pa.properties', иначе они не будут применяться. Также добавьте версию Hibernate, которую вы используете. –
Обновлен текст с версиями и примерами – LastElb
Вы сами настраиваете себя в своем классе приложения или другом классе '@ Configuration'? Если si, пожалуйста, добавьте. –