Размер записей в куче по умолчанию ehCache 3.0 (используется с кешем второго уровня спящего режима) - PullRequest
1 голос
/ 13 июля 2020

У меня включен кеш спящего режима 2-го уровня с реализацией ehcache 3.0. Я столкнулся с проблемой, при которой обращения к кешу относительно быстрые для около 10 тыс. Записей и очень медленные для около 30 тыс. Записей. Медленность не является линейной, что заставляет меня подозревать, что записи хранятся вне кучи или на диске. Я также подтвердил это, взяв трассировки стека и увидев узкое место в сериализаторе (в то время как в куче не следует использовать сериализаторы, насколько мне известно). Я не добавлял конфигурационный файл ehcache. xml. Кажется, я работаю с настройками по умолчанию. Есть идеи, какой размер кучи по умолчанию для ehcache?

1 Ответ

0 голосов
/ 22 июля 2020

Медленность не является линейной, что заставляет меня подозревать, что записи хранятся вне кучи или на диске.

Вам необходимо настроить такое поведение. Никто не может дать подробный совет, не зная вашей конфигурации или программы.

Из предоставленной вами информации наиболее вероятная причина:

Увеличивая размер кеша, вашей программе требуется больше памяти кучи. Если используемая память кучи приближается к доступной памяти кучи, ваша программа замедляется из-за чрезмерной сборки мусора. Сборщику мусора требуется «передышка» для эффективной работы.

Мой общий подход к решению любых проблем с производительностью:

  • Узнайте о максимальном размере кучи используемой Java реализации
  • Используйте инструменты вашей ОС, чтобы увидеть, что в настоящее время происходит, и получить представление об использовании ресурсов вашей программой с точки зрения памяти, ЦП и операций ввода-вывода. На Linux это будет vmstat
  • Используйте такой инструмент, как visualvm, или включите журналы G C, чтобы увидеть активность сборщика мусора
  • Имейте воспроизводимый тест, который вы можете использовать для оценки производительности

Чтобы найти идеальный размер кучи и записи, я предлагаю: Запустите тест с 5 КБ записей. Сколько памяти требует ваше приложение Java? Сколько памяти доступно в системе? Запустите тест с 10k записями. Ответьте на тот же вопрос. Затем вы можете линейно прогнозировать объем памяти с другими размерами кеша.

...