2015-03-10 2 views
0

8 экземпляров моего кластера Neo4j HA (версия Neo4j 2.1.2)
Я выполняю бенчмарки технологии с алгоритмами подачи новостей. Один клиент одновременно выполняет 50 запросов на чтение (!) Для каждого экземпляра, которые нацелены на server plugin, развернутые во всех экземплярах. Тест начинается после того, как все экземпляры загрузили данные от мастера. Запросы распространяются клиентом по кругу.Neo4j HA cluster - блок одиночных блоков

Если я использую кластер с 3 или 4 экземплярами, все работает отлично. Нагрузка распространяется равномерно по всем экземплярам (в зависимости от нагрузки процессора) и достигается низкая задержка запроса.

Однако, из 8 экземпляров 2 из них сразу же имеют высокие задержки запросов. В течение 3 секунд они увеличиваются с 500 мс до 10 с и дополнительно увеличиваются с эталонной продолжительностью из-за высокой скорости запроса.
Нагрузка процессора этих экземпляров максимальна. Остальные 6 экземпляров теперь имеют низкую нагрузку на ЦП, поскольку клиент все еще ждет ожидающие запросы.
Если я не возбуждаю запросы против двух экземпляров, остальные 6 экземпляров выполняются так, как ожидалось.
Если я изменяю заказ, те же экземпляры блокируют, поэтому это не связано с идентификатором сервера.
Если я удалю один из экземпляров из кластера, другой все еще блокирует.

Похоже, что это связано с конкретными экземплярами, но настройка всех 8 экземпляров одинакова, поскольку они являются виртуальными машинами. В файлах журналов также отсутствуют подсказки. Все экземпляры отмечены как доступные в главном console.log.
Любые идеи, что вызывает эту проблему и как ее решить?
Как грязное исправление, я начну кластер с 10 экземплярами и просто воспользуюсь 8 из них, но это нехорошее решение.

Редактировать: Я наблюдал подобное поведение из-за создания индекса на свойстве узла. Первый запрос на узел загружает индекс и ждет 10 секунд, чтобы он стал доступен, что в некоторых случаях слишком мало. Я немедленно остановил бенчмарк. Все узлы получают высокую нагрузку на процессор, и когда процессор стал холостым, я просто перезапустил серверы Neo4j. Когда они снова поднялись, индекс был доступен - в большинстве случаев.

Таким образом, это может быть связано с индексом проблемы. Каков правильный способ создания индексов в кластере HA?

+0

Возможно, вы можете поделиться кодом своего плагина, а также просмотреть стеки-трассировки затронутых экземпляров (jstack или kill -3 ) –

ответ

0

Извините, не видели свой код? Итак, конечная точка подачи называется?

Возможно, проблема с памятью? плагины имеют статус state, поэтому, если ваш Graphity-Instance сохраняет состояние, он может съесть много памяти.

Итак, пожалуйста, включите gc-logging и посмотрите, что-то там появляется.

+0

Да, конечная точка фида вызывается. Если конечная точка вызывается при первом создании экземпляра Graphity. Экземпляр Graphity является статическим, используется только один экземпляр. В случае, если вы просмотрели прямо код, вы можете увидеть [метод инициализации экземпляра] (https: // github.com/sebschlicht/graphity-neo4j/blob/master/src/main/java/de/uniko/sebschlicht/graphity/neo4j/Neo4jGraphity.java # L51-L66) в репозитории Graphity. Я ожидаю, что проблема будет связана с инициализацией. Согласно 'htop', доступно достаточно памяти, но я проверю журнал GC. –

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