2013-03-05 47 views
16

我正在EC2服務器上運行ElasticSearch。我無法理解ElasticSearch的記錄/調試。ElasticSearch消失/崩潰 - 無法找到日誌文件或任何其他信息

偶爾,服務會在運行良好的日子後消失(我預計它會崩潰)。例如:

# curl -XGET http://localhost:9200/ 
curl: (7) couldn't connect to host 

this ElasticSearch page,我期望我的日誌將提供/var/log/elasticsearch ... ...但是

# ls /var/data/elasticsearch 
ls: /var/data/elasticsearch: No such file or directory 

我沒有以任何方式改變了/config/logging.yml文件。 ElasticSearch以root身份運行,因此權限應該沒有問題。

我錯過了什麼?


每imotov的反應,我發現我的日誌文件在/root/elasticsearch/elasticsearch-0.20.5/logs ......但他預測,他們是非常無益的。

我檢查了我的Java版本:

java version "1.6.0_14" 
Java(TM) SE Runtime Environment (build 1.6.0_14-b08) 
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode) 

它看起來這是一個很老的版本,我正在升級它。

我也在我的記憶曲線

enter image description here

我們可以看到,有ES臨終前在一個奇怪的秒殺了的樣子。我試圖在這裏發現源代碼。唯一的其他進程應該是節點;它們分別被限制在4Gb和1.2Gb(一旦ES死了,只剩下節點,RAM就會降到1.2Gb,如你所見)。所以無論是ElasticSearch超過它的4Gb,或其他內存造成的尖峯...

FWIW,我使用m1.large實例(8GB RAM)。

回答

30

如果您運行elasticsearch的一個相對較新的版本中,你應該可以通過運行以下命令來查找日誌文件的位置

curl -s "localhost:9200/_nodes/_local/settings?pretty=true" | fgrep path.logs 

但如果elasticsearch突然消失,機會是你不會找到任何東西這些日誌。如果你運行的是java的舊版本(一歲或更久),你的java進程很可能會崩潰。當它發生時,JVM通常留下您的硬盤驅動器(通常在/tmp/在Linux上。在名爲hs_err_pidXXXX.log文件,看看你能不能找到任何和嘗試升級的Java到最新版本。

第二個可能的原因的突然失蹤elasticsearch是一個殺手級的過程,當系統內存耗盡時,它會觸發並殺死最大的進程(在你的情況下是彈性搜索)在彈性搜索上次消失的時候檢查syslog和kern.log如果你看到類似這樣的消息一個

Out of memory: Kill process 1234 (java) score 567 or sacrifice child 

您可能需要減少elasticsearch堆大小以留下更多內存到OS或升級到更大的實例。

+0

非常感謝imotov。我已經通過您的建議中發現的細節更新了我的問題 - 如果您碰巧有更多基於它們的想法,將會非常感激。 – 2013-03-05 16:42:23

+0

你應該肯定更新java。這很可能是這裏的罪魁禍首。 – imotov 2013-03-05 17:57:14

+0

感謝您幫助追蹤此問題。當彈性搜索失敗時,我確實在日誌中看到了oom_killer。搬到找到。 – 2015-08-07 18:37:38

1

我經歷了同樣的煩惱:

  • 更新的Java並沒有幫助
  • 從OpenJDK的遷移到甲骨文沒有
  • 內存消耗終於確定
  • 沒有錯誤消息的任何位置變化,只是JVM崩潰隨機

我的解決方案是刪除sigar lib:

cd  
sudo mv /usr/share/elasticsearch/lib/sigar . 
sudo service elasticsearch restart 

因爲,一切順利,唯一的影響:我失去了CPU監控。 ElasticSearch 1.5.1在帶有Ubuntu 14.04(OpenVZ)的VPS上運行。

UPDATE 1:我仍然要去除與elasticsearch 1.5.2

UPDATE 2 SIGAR LIB:搞清楚,開始elasticsearch當添加這些選項:

-XX:HeapDumpPath =/java_pid。 hprof

堆轉儲的目錄或文件名的路徑。管理。

-XX:當java.lang.OutOfMemoryError拋出-HeapDumpOnOutOfMemoryError

轉儲堆到文件。

將有助於調試

+0

爲什麼要刪除sigar? – 2015-04-27 11:48:45

+0

你應該檢查這個鏈接有更多的細節:https://bugzilla.openvz.org/show_bug.cgi?id=3187 – David 2015-04-28 12:34:57

+0

我會試試這個,因爲我有很長一段時間同樣的問題,沒有什麼能夠阻止elasticsearch在一些隨機時間後崩潰:(thx大衛 – danielgc 2017-01-16 22:17:08