Solr, OutOfMemoryErrors и куча не освобождены - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть SolrCloud, состоящий из трех экземпляров Solr (куча 9 ГБ), каждый из которых размещен на выделенном хосте (12 ГБ ОЗУ).

В настоящее время у нас есть коллекция с 150+ миллионами документов и растет. Иногда мы делаем много запросов, и я вижу (как мне кажется, это странное поведение в JVM):

Рост кучи Solr

На плато все случаи подняты OutOfMemoryErrors, и, когда я наблюдаю, как GC увеличивается, когда куча увеличивается, я вижу то, что, по моему мнению, почти нет GC вообще:

Solr JC times

Я настроил все экземпляры для использования GC1 и следовал документации, касающейся кучи для хорошо сконфигурированного экземпляра Solr, но я чувствую, что здесь что-то действительно не так.

Может кто-нибудь помочь мне понять, почему кажется, что GC не выполняется при выполнении запросов (может быть, некоторая настройка кэша или утечка памяти)?

Заранее спасибо:)

1 Ответ

0 голосов
/ 06 сентября 2018

Ну, на всякий случай, если кто-то еще столкнулся с этой проблемой, это действительно была некоторая настройка кэша, необходимая для моего конкретного использования.

TL; DR:

Тюнинг filterCache в моей коллекции сделал свое дело! : D


Как я решил это:

  1. Идентифицирован с мониторингом периода, когда возникла проблема (спасибо Прометей и Графана!)
  2. Определил, что приложения делали в то время
  3. Пытался воспроизвести поведение в управляемом состоянии
  4. Как только у меня появилась возможность вызывать проблему в любое время, я хотел, чтобы каждые три минуты я получал кучу JVM от Solr, поскольку куча увеличивалась
  5. С VisualVM я проанализировал, какие объекты не были очищены GC
  6. Итак, я искал в ссылочных объектах список предыдущего элемента

Все это, чтобы узнать, что объекты FastLRUCache содержат int[] массивов. Поиск в Google для "Solr Heap Growth FastLRUCache" Я нашел this .

Итак, так как теперь у нас есть 250 миллионов документов в этой коллекции, все, что мне нужно было сделать, это настроить параметр filterCache от исходного значения 512 до гораздо меньшего числа, например 20 или около того.

Надеюсь, это поможет кому-то еще в будущем.

...