2015-01-23 9 views
3

Я бегу вокруг восьми серверов (версия 3.5) экземпляров за балансировщиком нагрузки. Все серверы идентичны, а LB взвешен по номерам. Серверы имеют около 4M документов и получают постоянный поток запросов. Когда запускается сервер solr, он работает нормально. Но по прошествии некоторого времени он начинает откликаться на запросы, а серверный ввод-вывод сходит с ума до 100%. Посмотрите на графики New Relic:Solr I/O увеличивается с течением времени

enter image description here

Если серверы хорошо ведет себя в самом начале, я это начинает терпеть неудачу через некоторое время? Затем, если я перезапущу сервер, он вернется к низкому уровню ввода-вывода за одно и то же время, и это повторяется снова и снова.

+0

Вы пробовали профилировать? Это покажет некоторые горячие точки. – mindas

ответ

0

Ответ на этот вопрос относится к содержанию в this blog post.

Что происходит в этом случае, так это то, что запросы сильно зависят от чтения solr индексов. Эти индексы находятся на диске, до I/O i high. Для оптимизации доступа к дискам ОС Linux создает кеш в памяти для наиболее доступных областей диска. Он использует свободную память (не занятую моими приложениями) для этого кеша. Когда память заполнена, серверу необходимо снова считывать данные с дисков. По этой причине, когда solr перезапускается, JVM занимает меньше памяти, и для дискового кэша больше свободного места.

(проблема происходит на сервере с 15GB RAM и индексом 20Gb solr)

Решение является простым увеличением оперативной памяти сервера, так что весь индекс помещается в память и не требуется ввода/вывода.

+0

Я этого не понимаю. В блоге говорится, что MMapDirectory считывает индекс Lucene из дискового кэша ОС. Почему это следует учитывать против памяти приложения? Если это рассматривается как разделяемая память, почему страницы не заменяются на диск, поскольку другой диск IO нуждается в кеше? Как будто память, используемая для чтения файла, забирает память из кеша, что замедляет работу со временем, но память - это кеш, перезапуск не должен ускорять его. Если что-либо, перезапуск должен повредить производительность, потому что файлы должны быть снова прочитаны с диска. –

Смежные вопросы