Solr использует слишком много памяти - PullRequest
10 голосов
/ 27 марта 2012

У нас есть экземпляр Solr 3.4, работающий в Windows 2008 R2 с JDK горячей точки Oracle Java 6, который перестает отвечать на запросы.Когда мы посмотрели на машину, мы заметили, что доступная физическая память стала нулевой.

Процесс Tomcat7.exe использовал ~ 70 гигабайт (частный рабочий набор), но рабочий набор (память) использовал всю память в системе.В журналах Tomcat / Solr ошибок не было.Мы использовали VMMap, чтобы определить, что память используется для отображения памяти в файлах сегмента Solr.

Перезапуск Tomcat временно устранил проблему, но в итоге она вернулась.

Затем мы попытались уменьшить JVMразмер, чтобы дать больше места для файлов, отображаемых в памяти, но затем Solr в конечном итоге перестает отвечать на запросы со старым поколением на 100%.Повторная перезагрузка исправила проблему, но перед сбросом она не вызвала исключение нехватки памяти.

В настоящее время наше чувство пауков говорит нам, что кэш не сжимается при нагрузке на память, и чтовозможно, существует слишком много MappedByteBuffers, так что ОС не может освободить память из файлов с отображенной памятью.

Ответы [ 2 ]

1 голос
/ 15 апреля 2014

Слишком много параметров и слишком мало информации, чтобы помочь с любыми деталями. Этот ответ также довольно старый, как и упомянутые системы.

Вот несколько вещей, которые помогли в моем опыте:

  • скорее уменьшите использование оперативной памяти в Tomcat, а также в SOLR, чтобы уменьшить риск перестановки. Дайте системному пространству дышать.
  • если это «начинает» появляться без каких-либо изменений в Tomcat или конфигурации SOLR - возможно, это связано с тем, что объем данных, которые SOLR должен индексировать и запрашивать, увеличился. Это может означать, что исходная конфигурация никогда не была хорошей для начала, или что предел текущих ресурсов был достигнут и должен быть пересмотрен. Какой это?
  • проверка запросов (если вы можете повлиять на них): переместить любые конструкции подзапросов, которые часто запрашиваются, в filterqueries, переместить очень индивидуальные конструкции запроса в обычный параметр запроса. Уменьшите кэш запросов, увеличьте / сохраните кэш запросов фильтров или уменьшите кэш фильтров, если запросы фильтров не используются в вашей системе.
  • проверьте файл schema.xml SOLR на ошибки конфигурации (на самом деле это может быть неправильное представление). Я столкнулся с этим один раз: при импорте поля будут создаваться массово, что приведет к переполнению оперативной памяти.
  • если это происходит во время импорта: проверьте, настроен ли процесс импорта на автоматическую фиксацию, фиксирует ли он довольно часто, а также оптимизирует ли его - возможно, возможно выполнить фиксацию реже и оптимизировать только один раз в конце.
  • обновление Java, Tomcat и SOLR
0 голосов
/ 06 апреля 2012

Вероятно, это связано с новой политикой по умолчанию, которую SOLR использует для каталогов (она пытается отобразить их в ОЗУ или что-то в этом роде).

Читать это:
http://grokbase.com/t/lucene/solr-user/11789qq3nm/virtual-memory-usage-increases-beyond-xmx-with-solr-3-3

...