Solr использует разные кеши для предотвращения слишком большого количества операций ввода-вывода и вычислений во время запросов. Когда индексация не происходит слишком часто, вы можете получить огромный прирост производительности, используя эти кэши. В зависимости от структуры данных вашего индекса и размера кэшей они могут стать довольно большими и использовать значительную часть вашей кучи памяти. В этом посте я хотел бы показать, как вы можете использовать Eclipse Memory Analyzer, чтобы увидеть, сколько места реально используют ваши кеши в памяти.
Конфигурирование кешей
Все кэши Solr могут быть настроены в файле solrconfig.xml в разделе query
. Вы найдете такие определения:
1
2
3
4
|
< filterCache class = "solr.FastLRUCache" size = "8000" initialSize = "512" autowarmCount = "0" /> |
Это пример кеша фильтра, настроенного на использование FastLRUCache
, максимальный размер которого составляет 8000 элементов без автоматического прогрева. Solr поставляется с двумя обычно используемыми реализациями кэша, FastLRUCache
, который использует ConcurrentHashMap
и LRUCache
, который синхронизирует вызовы. Некоторые из LRUCache
по-прежнему настроены на использование LRUCache
но в некоторых проектах с интенсивным чтением у меня были хорошие результаты, если я также изменил их на FastLRUCache
.
Кроме того, начиная с Solr 3.6, есть также LFUCache . Я никогда не использовал его, и он все еще помечен как экспериментальный и может быть изменен.
Solr поставляется со следующими кешами:
FilterCache
Кэширует набор фильтров запросов. Это может быть очень эффективным кешем, если вы повторно используете фильтры.
QueryResultCache
Хранит упорядоченный список идентификаторов документов для запроса.
DocumentCache
Кэширует сохраненные поля документов Lucene. Если у вас есть большие или много полей, этот кеш может стать довольно большим.
FieldValueCache
Кеш, который в основном используется для огранки.
Дополнительно вы увидите ссылки на FieldCache, который не является кешем, управляемым Solr, и не может быть настроен.
В конфигурации по умолчанию Solr кэширует только 512 элементов на кэш, что часто может быть слишком маленьким. Вы можете увидеть использование вашего кэша в административном представлении Solr в разделе Plugin / Stats / Caches вашего ядра. Это скажет вам скорость попадания, а также выселения для ваших кешей.
Статистика является хорошей отправной точкой для настройки ваших кэшей, но вы должны знать, что, установив слишком большой размер, вы можете увидеть некоторые нежелательные действия GC. Вот почему может быть полезно взглянуть на реальный размер ваших кешей в памяти, а не только количество элементов.
Eclipse MAT
Eclipse MAT — отличный инструмент для просмотра вашей кучи в памяти и определения, какие объекты занимают пространство. Как следует из названия, он основан на Eclipse и может быть загружен как автономный инструмент или доступен через сайты обновлений для интеграции в существующий экземпляр.
Кучи свалок могут быть получены с помощью инструмента напрямую, но вы также можете открыть существующие свалки. При открытии он автоматически рассчитает диаграмму самых больших объектов, которые могут уже содержать некоторые объекты кэша, если вы храните много элементов в кэше.
Используя ссылки под круговой диаграммой, вы также можете открыть дополнительные автоматические отчеты, например, «Лучшие потребители», более подробную страницу о крупных объектах.
Даже если вы видите здесь некоторые классы кеша, вы не можете увидеть, какой именно кеш потребляет память. Используя меню «Запрос» в верхней части отчета, вы также можете перечислить экземпляры классов напрямую, независимо от их размера.
Мы выбираем List Objects с исходящими ссылками и вводим имя класса для FastLRUCache org.apache.solr.search.FastLRUCache
. Для конфигурации по умолчанию вы увидите два экземпляра. При нажатии на один из экземпляров вы можете увидеть имя кеша в нижнем левом окне, в данном случае кеш фильтра.
Для размера кучи доступно два числа: мелкий размер и оставшийся размер . Когда мы смотрим на кэши, нас интересует оставшийся размер, так как это размер, который будет доступен, когда экземпляр будет собирать мусор, то есть размер кэша, который используется только кэшем. В нашем случае это около 700 КБ, но это может значительно вырасти.
Вы также можете выполнить ту же проверку для org.apache.solr.search.LRUCache
чтобы увидеть реальный размер ваших кэшей.
Вывод
Кэши могут быть намного больше, чем в нашем примере здесь. Eclipse Memory Analyzer уже очень помог мне увидеть, есть ли проблемы с кучей, которая становится слишком большой.
Ссылка: | Ознакомьтесь с размерами Solr Cache: Eclipse Memory Analyzer от нашего партнера JCG Флориана Хопфа в блоге Dev Time . |