2016-03-01 193 views
1

由於CPU使用率高,Elasticsearch突然停止工作,現在當我重新啓動它時,它始終使用大約100%的CPU和58%的內存,並且不下降。有大約1.300.000個數據與Elasticsearch相關聯。使用Linux服務器的Ubuntu 15.04Elasticsearch Java使用非常高的CPU和內存

默認/ elasticsearch

ES_HEAP_SIZE=2g (half of my memeory) 
MAX_OPEN_FILES=65535 
MAX_LOCKED_MEMORY=unlimited 

limits.conf中

elasticsearch - nofile 65535 
elasticsearch - memlock unlimited 

elasticsearch.yml

bootstrap.mlockall: true 

curl http://localhost:9200/_nodes/hot_threads?pretty=true 

::: {elasticnode} {wrdxzFcXT0aTXnp4R5KFbA} {127.0.0.1} {本地主機/ 127.0.0.1:9300}在2016-03-01T10 熱線程:24:09.884Z,間隔= 500毫秒,busiestThreads = 3,線程'elasticsearch [elasticnode] [clusterService#updateTask] [T#1]' 10/10共享以下29個元素的快照 sun.nio.fs. 93.7%(500ms後爲468.4ms)CPU使用情況ignoreIdleThreads = true: sun.nio.fs. UnixNativeDispatcher.readdir(本機方法) sun.nio.fs.UnixDirectoryStream $ UnixDirectoryIterator.readNextEntry(UnixDirectoryStream.java :168) sun.nio.fs.UnixDirectoryStream $ UnixDirectoryIterator.hasNext(UnixDirectoryStream.java:201) org.elasticsearch .index.translog.Tra nslog $ OnCloseRunnable.handle(Translog.java:726) org.elasticsearch.index.translog.Translog $ OnCloseRunnable.handle(Translog.java:713) org.elasticsearch.index.translog.ChannelReference.closeInternal(ChannelReference.java: 67) org.elasticsearch.common.util.concurrent.AbstractRefCounted.decRef(AbstractRefCounted.java: 64) org.elasticsearch.index.translog.TranslogReader.close(TranslogReader.java:143) org.apache.lucene。 util.IOUtils.close(IOUtils.java:97) org.elasticsearch.index.translog.Translog.close(Translog.java:425) org.apache.lucene.util.IOUtils.close(IOUtils.java:97) org.apache.lucene.util.IOUtils.close(IOUtils.java:84) org.elasticsearch.index.eng ine.InternalEngine.closeNoLock(InternalEngine.java:990) org.elasticsearch.index.engine.Engine.close(Engine.java:1147) org.apache.lucene.util.IOUtils.close(IOUtils.java:97) org.apache.lucene.util.IOUtils.close(IOUtils.java:84) org.elasticsearch.index.shard.IndexShard.close(IndexShard.java:837) org.elasticsearch.index.IndexService.closeShardInjector(IndexService的.java:443) org.elasticsearch.index.IndexService.removeShard(IndexService.java:416) org.elasticsearch.indices.cluster.IndicesClusterStateService.failAndRemoveShard(IndicesClus terStateService.java:743) org.elasticsearch.indices。 cluster.IndicesClusterStateService.applyMappings(IndicesClusterSt a teService.java:364) org.elasticsearch.indices.cluster.IndicesClusterStateService.clusterChanged(IndicesClusterS tateService.java:164) org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalCluste rService.java:600) 有機.elasticsearch.cluster.service.InternalClusterService $ UpdateTask.run(InternalClusterServ ice.java:762) org.elasticsearch.common.util.concurrent。PrioritizedEsThreadPoolExecutor $ TieBreakingPriorit izedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231) org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPriorit izedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194) java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745)

0.1%(263.4micros出線程彈性搜索[elasticnode] [transport_clie
nt_timer] [T#1] {哈希輪定時器#1}' 個10/10快照共享以下5個元素 java.lang.Thread.sleep(本機方法)

org.jboss.netty.util.HashedWheelTimer $ Worker.waitForNextTick(HashedWheelTimer.java:445)org.jboss.netty .util.HashedWheelTimer $ Worker.run(HashedWheelTimer.java:364)org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) java.lang.Thread.run(Thread.java:745)

查詢示例。這是elasticsearch.php中的代碼:

public function advancedquery($type, $query) { 
    return $this->call($type . '/_search', 'POST', $query); 
} 

任何想法是什麼?我可以根據需要提供任何其他信息。

+0

你能提供你用來提出請求的代碼嗎?儘管無論提出何種請求,它聽起來都像100%一樣,這是正確的嗎? – iSkore

+0

另外,爲了清楚起見,您正在使用AWS ElasticSearch? – iSkore

+0

@iskore public function advancedquery($ type,$ query) { return $ this - > call($ type。'/ _search','POST',$ query); }' 這是elasticsearch.php中的代碼。 是的沒有提出任何請求使用總是非常高 PS。不,我們沒有使用AWS ES。 –

回答

0

基於評論。你有一個cronjob運行,每10分鐘有node.jsJavaScript運行一個文件。根據您的問題,您有JS文件在同一臺服務器上ping PHP文件。在同一臺服務器上,你有一個運行posix東西的Java核心。

你的CPU過載問題的答案是:

選擇一個系統。您有三個環境在同一個實例上運行。 Java和PHP在Apache上運行,Node.JS在NGINX上運行。而且你甚至不應該跨越Java和PHP。那就是問題所在。這就像在同一時間運行AutoCad,Final Cut Pro和Unreal遊戲引擎......並不是那樣工作。

將您的系統精簡爲您選擇的一種語言,當然也支持AWS SDK's

+0

該網站在Apach2上,而Elasticsearch在Nginx上的另一項服務上,如果ES停止運行,我們一直在分離它。我不認爲這有任何故障連接。 我們在沒有問題的情況下運行了這個cronjob半天,然後發生了這個問題。並刪除了這份工作。 –