Предупреждение EHCache SizeOf

Я использую EHCache версии 2.6.9 с Hibernate 4. Я вижу в журналах следующее предупреждение:

net.sf.ehcache.pool.SizeOf.ObjectGraphWalker checkMaxDepth достигнут настроенный предел в 1000 ссылок на объекты при попытке вычислить размер графа объектов....

Я не устанавливал ограничение на 1000. Однако, увидев это предупреждение, я определил sizeOfPolicy равным 10000. Однако я все еще вижу предупреждение.

net.sf.ehcache.pool.SizeOf deepsize из настроенного предела в 1000 ссылок на объекты был достигнут при попытке вычислить

  1. Пожалуйста, предложите возможное решение?
  2. Каковы последствия, если я не исправлю это предупреждение?
  3. Должен ли я игнорировать это предупреждение, добавляя аннотацию @Ignoresizeof к объектам модели? Если да, то каково влияние?

person ramesh    schedule 27.10.2017    source источник


Ответы (3)


Ответы на ваши вопросы:

  1. DeepSize указывает, что вы кэшируете довольно большой граф объектов — более 10 000 различных объектов.
  2. Вычисление размера кеша будет отключено, в худшем случае вы получите нехватку памяти до того, как кеш начнет вытесняться.
  3. Вы можете сделать это, но опять же, если это не общие объекты, которые не должны учитываться, это приведет к беспорядку в вычислении размера.
person Louis Jacomet    schedule 06.11.2017

Магическое число «1000» — это глубина по умолчанию, которую ehCache проходит перед тем, как записать предупреждающее сообщение, а затем продолжить определение размера графа объектов. (Кажется, они представили это начиная с версии ehCache 2.5.0). Смотрите эту ссылку ниже:

http://grepcode.com/file/repo1.maven.org/maven2/net.sf.ehcache/ehcache-core/2.6.2/net/sf/ehcache/config/SizeOfPolicyConfiguration.java/

Однако это поведение по умолчанию можно изменить с помощью соответствующих директив конфигурации. Для версии, которую вы упомянули, проверьте раздел «Конфигурация для ограничения графа пройденных объектов» в официальном документе ниже:

http://www.ehcache.org/documentation/ehcache-2.6.x-documentation.pdf

И я вижу, что @Louis ответил на все ваши вопросы по порядку. Возможно, вам придется запустить некоторые тесты (это могут быть тесты нагрузки/производительности), чтобы увидеть, насколько вы хотите контролировать глубину обхода, чтобы настроить его в зависимости от поведения и потребностей вашего приложения.

person Chaithu Narayana    schedule 15.05.2018

Никто не рассматривал проблему Hibernate в вашем вопросе.

Вероятно, проблема, которую вы видите, связана с тем, что компонент SizeOf проходит через части инфраструктуры Hibernate, такие как session.

Это решается с помощью FilterConfigurators в sizeof. Я разветвил репозиторий ehcache-sizeof-hibernate, ориентированный на Hibernate 4, и исправил его для работы с Hibernate 5 здесь

person NealeU    schedule 03.01.2021