Как загрузить весь индекс Solr в память для увеличения производительности? - PullRequest
0 голосов
/ 24 января 2019

Мой сайт получает 10 - 30 посещений в секунду (включая сканирование ботов).Я проиндексировал 6 миллионов записей (из таблицы MySQL) в Solr.Когда я получаю 30 записей, используя q=something и sort=random_, Solr реагирует на ответ от 200 до 300 миллисекунд, иногда 100 мс.

Я пытался улучшить поиск, используя настройку solr.RAMDirectoryFactory, но у меня возникла ошибка нехватки памяти,Я знаю, что solr.RAMDirectoryFactory настройка не постоянна.Итак, что является лучшим вариантом для увеличения кэширования и загрузки всего индекса в память.

Я использую сервер Digital Ocean 8GB для Solr.

Настройки Solr ..

 <filterCache class="solr.FastLRUCache"
                 size="512"
                 initialSize="512"
                 autowarmCount="0"/>

 <queryResultCache class="solr.LRUCache"
                     size="512"
                     initialSize="512"
                     autowarmCount="0"/>

<documentCache class="solr.LRUCache"
                   size="512"
                   initialSize="512"
                   autowarmCount="0"/>

Версия Solr:

solr-spec 7.2.1
solr-impl 7.2.1 b2b6438b37073bee1fca40374e85bf91aa457c0b - ubuntu - 2018-01-10 00:54:21
lucene-spec 7.2.1
lucene-impl 7.2.1 b2b6438b37073bee1fca40374e85bf91aa457c0b - ubuntu - 2018-01

Аргументы:

-DSTOP.KEY=solrrocks-DSTOP.PORT=7983-Djetty.home=/opt/solr/server-Djetty.port=8983-Dlog4j.configuration=file:/var/solr/log4j.properties-Dsolr.data.home=-Dsolr.default.confdir=/opt/solr/server/solr/configsets/_default/conf-Dsolr.install.dir=/opt/solr-Dsolr.jetty.https.port=8983-Dsolr.log.dir=/var/solr/logs-Dsolr.log.muteconsole-Dsolr.solr.home=/var/solr/data-Duser.timezone=UTC-XX:+CMSParallelRemarkEnabled-XX:+CMSScavengeBeforeRemark-XX:+ParallelRefProcEnabled-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintHeapAtGC-XX:+PrintTenuringDistribution-XX:+UseCMSInitiatingOccupancyOnly-XX:+UseConcMarkSweepGC-XX:+UseGCLogFileRotation-XX:+UseParNewGC-XX:-OmitStackTraceInFastThrow-XX:CMSInitiatingOccupancyFraction=50-XX:CMSMaxAbortablePrecleanTime=6000-XX:ConcGCThreads=4-XX:GCLogFileSize=20M-XX:MaxTenuringThreshold=8-XX:NewRatio=3-XX:NumberOfGCLogFiles=9-XX:OnOutOfMemoryError=/opt/solr/bin/oom_solr.sh 8983 /var/solr/logs-XX:ParallelGCThreads=4-XX:PretenureSizeThreshold=64m-XX:SurvivorRatio=4-XX:TargetSurvivorRatio=90-Xloggc:/var/solr/logs/solr_gc.log-Xms512m-Xmx512m-Xss256k-verbose:gc

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

1 Ответ

0 голосов
/ 24 января 2019

Важно помнить, что с сервером 8 ГБ и Solr Heap, установленным на 512M, Lucene (не Solr!) Будет использовать оставшуюся память на машине (за исключением того, что требуется ОС и т. Д.)

Допустим, например, что ОС требуется 512 МБ ОЗУ, а ваша Solr Heap составляет 512 МБ - тогда для Lucene осталось 7 ГБ.Если вы новичок в Solr и Lucene , этот будет отличным чтением о том, как работает память Lucene.

Насколько велики ваши индексы?Вы можете проверить свои папки /solr/data с помощью du -h.

Для уточнения УВЕЛИЧЕНИЕ Solr Heap ухудшит ситуацию (памяти для Lucene будет меньше).Чтобы избежать подкачки оперативной памяти на диск, вам также необходимо отключить подкачку (см., Например, this ).

В Solr и Lucene есть множество кнопок и кнопок, а ваш экземпляр необходимо настроить, чтобы обеспечить сохранение всего индекса в памяти.Даже тогда помните, что такие вещи, как Java GC, скорость процессора, скорость памяти и предварительный подогрев индекса в памяти, значительно влияют на время отклика.

Подробнее см.

...