2011-12-22 259 views
2

經過一段時間(有時幾分鐘,有時幾天),我的應用程序開始消耗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的連接來修復。

+0

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

+0

哦,是一個類似的線程。我在Web上看到類似這樣的帖子,但所有這些都是舊版本的Netty,但ElasticSearch 0.18.5使用較新的Netty。所以,也許還有別的 – 2011-12-22 17:18:34

回答

1

你可以檢查最新的netty版本(3.2.7.Final),看看它是否修復它?我認爲我們修復了一個可能會導致選擇器無限循環的bug,因此會消耗100%的cpu。

+0

所提到的elasticsearch的版本(0.18.5)已經使用了新的3.2.7 netty版本...。 – kimchy 2011-12-23 10:44:12