Solr: эксплуатационная настройка
Используйте эту инструкцию, чтобы подобрать память Solr, применить изменения и проверить работу поиска. Параметры потоков, пакетного индексирования и слияния сегментов описаны отдельно: Настройка производительности индексирования.
Перед началом
- Проверьте расчёт ресурсов и фактический лимит памяти контейнера.
- Откройте [Общие настройки] → [Поиск (Solr)] → [Инстансы SolrCloud] и сохраните исходные показатели памяти, времени запроса и состояния реплик.
- Сохраните действующие
.envи Docker Compose. - Для перезапуска Solr выберите окно обслуживания. В установке с одним экземпляром поиск на это время будет недоступен.
Выберите размер памяти
Solr работает внутри JVM. Переменная SOLR_HEAP задаёт размер её кучи; в штатной конфигурации Клавдия используется 4096m. Кроме кучи, память требуется самой JVM, операционной системе и файловому кешу. При совместном размещении оставьте ресурсы PostgreSQL и узлу Клавдия.
| Память сервера | Исходный ориентир |
|---|---|
| До 48 ГБ | один Solr с кучей 8–16 ГБ, если это позволяет бюджет остальных компонентов |
| 64 ГБ и больше | один Solr с кучей до 31 ГБ; при недостатке ресурсов — дополнительные узлы индексирования |
Эти значения не являются обязательным минимумом: для небольшой нагрузки может быть достаточно штатных 4 ГБ. В памяти находятся поисковые структуры и кеши, а не весь индекс.
Около 32 ГБ JVM может перестать использовать сжатые ссылки на объекты (
compressed oops(!)). Точная граница зависит от JVM и её параметров. Значение до 31 ГБ — практический ориентир, а не гарантия для любой сборки. Не увеличивайте кучу выше этой границы без проверки режима JVM и измерения результата.
Высокое использование кучи не всегда означает нехватку памяти: JVM освобождает её при сборке мусора. Оценивайте длительность пауз и устойчивую загрузку вместе с очередью индексирования и задержкой поиска.
Измените SOLR_HEAP
-
В каталоге установки откройте
.envи задайте выбранное значение, например:SOLR_HEAP=8192m -
Проверьте, что Docker Compose передаёт его именно в контейнер
klvd-solr:environment: SOLR_HEAP: ${SOLR_HEAP:-4096m}Добавляйте строку в существующий блок
environment, сохраняя его формат и остальные параметры. Если значение уже задано непосредственно в compose-файле, измените его там. -
Пересоздайте контейнер с новыми параметрами:
cd /opt/klvd docker compose up -d --force-recreate klvd-solr
Обычный restart не передаёт контейнеру изменённые переменные окружения. Том поискового индекса не удаляйте; сбрасывать индекс ради изменения памяти не требуется.
Проверьте результат
- В [Инстансы SolrCloud] убедитесь, что экземпляр вернулся в
live_nodesи реплики находятся в состоянииactive. - В колонке [JVM Heap] (!) проверьте новый максимум памяти. Подсветка использования начинается с 75% и 90%.
- Повторите типичный поисковый запрос и сравните [QTime] (!) с исходным значением. Проверяйте одинаковые запросы при сопоставимой нагрузке.
- Проверьте журнал Solr и динамику очереди индексирования. Не должно быть повторяющихся аварий по памяти или длительных пауз сборки мусора.
{{СКРИНШОТ}}
Если задержки сохранились
- Если куча постоянно заполнена, а паузы сборки мусора растут, пересмотрите её размер в пределах доступного бюджета.
- Если увеличить память нельзя, уменьшите
ramBufferSizeMBпо инструкции настройки индексирования. - Если память свободна, проверьте нагрузку CPU, дисковые задержки и сложность запросов. Рост
QTimeсам по себе не доказывает нехватку памяти. - Для углублённой проверки используйте
/solr/admin/info/systemи средства мониторинга JVM. Схема, порт и аутентификация должны соответствовать вашему подключению к Solr.
При ухудшении верните прежний SOLR_HEAP и снова пересоздайте только контейнер Solr.
Когда нужны дополнительные экземпляры
Штатный способ масштабирования — добавить узлы с ролью [Индексация]. Каждый узел регистрирует один локальный Solr; порядок описан на странице Добавление и состояние экземпляров Solr.
Если на одном сервере требуется несколько экземпляров Solr, их размещение настраивается вручную:
- каждому контейнеру нужны отдельные порт и том индекса;
- у каждого контейнера задаётся собственный
SOLR_HEAPв пределах общего бюджета сервера; - все экземпляры подключаются к ZooKeeper одного SolrCloud;
- после запуска проверяются
live_nodesи размещение реплик вCLUSTERSTATUS.
Типовой установщик создаёт один Solr на узел. Дополнительный контейнер на том же сервере не получает отдельной управляемой строки в реестре экземпляров Клавдия. Его вывод, включение и обслуживание выполняются вручную средствами SolrCloud. Несколько контейнеров на одном хосте также не защищают от отказа этого хоста.
При выборе ручного размещения заранее подготовьте отдельную конфигурацию контейнеров и регламент обслуживания; не копируйте работающий контейнер с тем же портом или томом.
Связанные материалы
- Настройка производительности индексирования
- SolrCloud: архитектура
- Вывод экземпляра Solr на обслуживание
- Документация Apache Solr: настройка JVM
- Документация Apache Solr: эксплуатационная конфигурация
Навигация по книге
- Следующая статья: Проверка состояния узлов