Запустили в продакшн поиск на 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 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)
Может попробовать тоже самое с Task List? Это позволит нам сравнить, что в этот момент запускается по сравнению, с тем, что обычно работает на этой ноде, когда проблем не возникает. Просто если это не поиск и не индексация, то slowlog ничего не поймает.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.