Что можно проверить при тормазах одной из нод в кластере?

Добрый день.

Запустили в продакшн поиск на elasticsearch (5.2.2). В кластере 4 одинаковых машины и один индекс, который состоит из одного шарда с тремя репликами.

Вроде бы всё хорошо, все запросы выполняются меньше чем 100-200мс.
Но на одной из нод периодически случаются пики в 600-1000мс.
Причём случаются они раз 5 минут, причём всё время, в кратное 5 минутам, т.е., например, в 07:00, 07:05, 07:10, 07:15 итд.

Эта нода не является мастером, первичный шард индекса тоже находится не на ней. В остальных показателях ничего не отличается. (Использование памяти, cpu и диска, Heap used, GC count, GC time, Query Cache Size)

После перезагрузки ноды всё повторяется.
Больше на этих машинах ничего нет (это виртуалки, которые выделены исключительно под elasticsearch)

Подскажите, пожалуйста, может ли это быть связано c elasticsearch и какие показатели или настройки можно попробовать проверить или помониторить, чтобы разобраться?
(Может можно что-то проверить в конфигурации самих машин?)

Запустите hot_thread во время пика несколько раз и пришлите результат сюда.

Получилось вот что:

Hot threads at 2017-06-23T08:50:19.084Z, interval=500ms, busiestThreads=3, ignoreIdleThreads=true:

3.3% (16.3ms out of 500ms) cpu usage by thread 'elasticsearch[elastic03z1][search][T#1]'
 4/10 snapshots sharing following 18 elements
   org.elasticsearch.search.fetch.FetchPhase.execute(FetchPhase.java:154)
   org.elasticsearch.search.aggregations.metrics.tophits.TopHitsAggregator.buildAggregation(TopHitsAggregator.java:162)
   org.elasticsearch.search.aggregations.bucket.BestBucketsDeferringCollector$2.buildAggregation(BestBucketsDeferringCollector.java:204)
   org.elasticsearch.search.aggregations.bucket.BucketsAggregator.bucketAggregations(BucketsAggregator.java:116)
   org.elasticsearch.search.aggregations.bucket.terms.LongTermsAggregator.buildAggregation(LongTermsAggregator.java:160)
   org.elasticsearch.search.aggregations.AggregationPhase.execute(AggregationPhase.java:139)
   org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:112)
   org.elasticsearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:246)
   org.elasticsearch.search.SearchService.executeFetchPhase(SearchService.java:360)
   org.elasticsearch.action.search.SearchTransportService$9.messageReceived(SearchTransportService.java:322)
   org.elasticsearch.action.search.SearchTransportService$9.messageReceived(SearchTransportService.java:319)
   org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69)
   org.elasticsearch.transport.TcpTransport$RequestHandler.doRun(TcpTransport.java:1488)
   org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:596)
   org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   java.lang.Thread.run(Thread.java:745)
 6/10 snapshots sharing following 10 elements
   sun.misc.Unsafe.park(Native Method)
   java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
   java.util.concurrent.LinkedTransferQueue.awaitMatch(LinkedTransferQueue.java:737)
   java.util.concurrent.LinkedTransferQueue.xfer(LinkedTransferQueue.java:647)
   java.util.concurrent.LinkedTransferQueue.take(LinkedTransferQueue.java:1269)
   org.elasticsearch.common.util.concurrent.SizeBlockingQueue.take(SizeBlockingQueue.java:161)
   java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   java.lang.Thread.run(Thread.java:745)

==

Hot threads at 2017-06-23T08:51:27.612Z, interval=500ms, busiestThreads=3, ignoreIdleThreads=true:

0.8% (4.1ms out of 500ms) cpu usage by thread 'elasticsearch[elastic01z1][search][T#5]'
 5/10 snapshots sharing following 9 elements
   org.elasticsearch.action.search.SearchTransportService$9.messageReceived(SearchTransportService.java:322)
   org.elasticsearch.action.search.SearchTransportService$9.messageReceived(SearchTransportService.java:319)
   org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69)
   org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:610)
   org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:596)
   org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   java.lang.Thread.run(Thread.java:748)
 5/10 snapshots sharing following 10 elements
   sun.misc.Unsafe.park(Native Method)
   java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
   java.util.concurrent.LinkedTransferQueue.awaitMatch(LinkedTransferQueue.java:737)
   java.util.concurrent.LinkedTransferQueue.xfer(LinkedTransferQueue.java:647)
   java.util.concurrent.LinkedTransferQueue.take(LinkedTransferQueue.java:1269)
   org.elasticsearch.common.util.concurrent.SizeBlockingQueue.take(SizeBlockingQueue.java:161)
   java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
   java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   java.lang.Thread.run(Thread.java:748)

==

Похоже, что вы пропустили момент когда что-то происходило. Попробуйте еще раз запустить hot_thread из скрипта ровно в 00 секунд.

Вообще, elasticsearch ничего такого через каждые 5 минут не делает. Может, у вас какой-нибудь cron job где-то сидит и что-нибудь тяжелое запускает?

Несколько раз пробовали, других сообщений не было.
Всё равно спасибо, попробуем включить slowlog.

Может попробовать тоже самое с Task List? Это позволит нам сравнить, что в этот момент запускается по сравнению, с тем, что обычно работает на этой ноде, когда проблем не возникает. Просто если это не поиск и не индексация, то slowlog ничего не поймает.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.