После некоторого периода времени (иногда минут, иногда дней) мое приложение начинает потреблять 100% процессор. Как я вижу из VisualVM, это всегда происходит в классе org.elasticsearch.common.netty.channel.socket.nio.NioClientSocketPipelineSink
.ElasticSearch потребляет 100% CPU
А также, как я вижу из бревен, он бросает следующее исключение:
NioClientSocketPipelineSink:internalWarn:105 - Unexpected exception in the selector loop.
java.nio.channels.CancelledKeyException
at sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:55)
at sun.nio.ch.SelectionKeyImpl.readyOps(SelectionKeyImpl.java:69)
at java.nio.channels.SelectionKey.isConnectable(SelectionKey.java:318)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:369)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:292)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Btw, я не уверен, где проблема.
Это вопрос ElasticSearch? Или встроенный Netty? Или моя конфигурация сервера/приложения?
Я использую Ubuntu 64 11.10, Sun Java 1.6.0_26-b03 и Elastic Search 0.18.5
Update
Кажется, что это было, потому что я попытался открыть и тесное соединение для каждого запроса ElasticSearch. И это было, я думаю, какая-то проблема параллелизма.
Исправлено путем открытия соединения с Elastic Search только один раз, при запуске.
Посмотрите там аналогичная нить в списке рассылки, https://groups.google.com/group/elasticsearch/browse_thread/thread/b5a86523bfd616b7/9609d236626feef0?lnk=gst&q=100%25#9609d236626feef0 – Andy
Ах да. Я вижу такие публикации в Интернете, но все они для старой версии Netty, но ElasticSearch 0.18.5 использует более новую Netty. Итак, может быть, есть что-то еще –