经过一段时间(有时几分钟,有时几天),我的应用程序开始消耗100%的CPU。正如我从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)
顺便说一句,我不知道哪里出了问题。
它是否是ElasticSearch问题?或嵌入Netty?或者我的服务器/应用配置?
我使用Ubuntu 11.10 64,的Sun Java 1.6.0_26-B03和弹性搜索0.18.5
更新
看来,那是因为我试图打开并关闭每个请求到ElasticSearch的连接。我想,这是一种并发问题。
通过在启动时仅打开一次到Elastic Search的连接来修复。
Look的有邮件列表,https://groups.google.com/group/elasticsearch/browse_thread/thread/b5a86523bfd616b7/9609d236626feef0?lnk=gst&q=100%25#9609d236626feef0 – Andy 2011-12-22 16:55:52
哦,是一个类似的线程。我在Web上看到类似这样的帖子,但所有这些都是旧版本的Netty,但ElasticSearch 0.18.5使用较新的Netty。所以,也许还有别的 – 2011-12-22 17:18:34