【问题标题】:ElasticSearch disappearing / crashing -- cannot find log files or any other informationElasticSearch 消失/崩溃——找不到日志文件或任何其他信息
【发布时间】:2017-01-18 21:36:12
【问题描述】:

我在我的 EC2 服务器上运行 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)

看起来这是一个非常旧的版本,我正在努力升级它。

我还查看了我的内存图

我们可以看到在 ES 死亡之前出现了一个奇怪的峰值。我试图在这里找到源头。唯一的其他进程应该是节点;它们的上限分别为 4Gb 和 1.2Gb(如您所见,一旦 ES 死亡并且只剩下节点,RAM 就会下降到 1.2Gb)。因此,要么 ElasticSearch 超过了 4Gb,要么其他原因导致内存激增......

FWIW,我正在使用 m1.large 实例(8GB RAM)。

【问题讨论】:

    标签: amazon-ec2 elasticsearch


    【解决方案1】:

    如果您运行相对较新版本的 elasticsearch,您应该能够通过运行以下命令找到日志文件的位置

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

    但是如果 elasticsearch 突然消失,你很可能在这些日志中找不到任何东西。如果您运行的是较旧版本的 java(一岁或以上),您的 java 进程很可能崩溃。发生这种情况时,JVM 通常会在您的硬盘上留下名为 hs_err_pidXXXX.log 的文件(通常在 Linux 上的 /tmp/ 中。看看是否可以找到任何文件并尝试将 Java 升级到最新版本。

    elasticsearch突然消失的第二个可能原因是oom-killer。当系统内存不足时,这是一个启动并终止最大进程(在您的情况下为 elasticsearch)的进程。检查 syslog 和 kern.log 大约在 elasticsearch 上次消失的时间。如果您看到这样的消息

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

    您可能需要减小 elasticsearch 堆大小以将更多内存留给操作系统或升级到更大的实例。

    【讨论】:

    • 非常感谢 imotov。我已根据您的建议中发现的详细信息更新了我的问题 - 如果您碰巧有更多基于这些建议的想法,我们将不胜感激。
    • 你绝对应该更新java。这很可能是这里的罪魁祸首。
    • 感谢您帮助跟踪问题。当弹性搜索失败时,我确实在日志中看到了 oom_killer。移动到找到。
    【解决方案2】:

    我也遇到过同样的问题:

    • 更新的 JAVA 没有帮助
    • 从 openJDK 迁移到 oracle 没有任何改变
    • 内存消耗终于OK了
    • 任何地方都没有错误消息,只是 JVM 随机崩溃

    我的解决方案是删除 sigar 库:

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

    既然一切都很顺利,唯一的影响是:我失去了 CPU 监控。 ElasticSearch 1.5.1 在带有 Ubuntu 14.04 (OpenVZ) 的 VPS 上运行。

    更新 1:我仍然需要使用 elasticsearch 1.5.2 删除 sigar 库

    更新 2:要弄清楚,在启动 elasticsearch 时添加这些选项:

    -XX:HeapDumpPath=./java_pid.hprof

    堆转储的目录或文件名的路径。易于管理。

    -XX:-HeapDumpOnOutOfMemoryError

    在抛出 java.lang.OutOfMemoryError 时将堆转储到文件。

    有助于调试

    【讨论】:

    • 您应该查看此链接以了解更多详细信息:bugzilla.openvz.org/show_bug.cgi?id=3187
    • 我会试试这个,因为我有同样的问题很长时间了,没有什么能阻止弹性搜索在随机时间后崩溃:(谢谢大卫
    • @danielgc,检查我的 UPDATE2,可以帮助你。
    • 非常感谢@David,自从我删除了 sigar,它一直运行良好......我很感激,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多