我在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)。
答案 0 :(得分:32)
如果您运行相对较新版本的elasticsearch,您应该能够通过运行以下命令找到日志文件的位置
curl -s "localhost:9200/_nodes/_local/settings?pretty=true" | fgrep path.logs
但是如果elasticsearch突然消失,你很可能在这些日志中找不到任何东西。如果您运行的是旧版本的java(一年或更长时间),那么您的Java进程很可能会崩溃。当它发生时,JVM通常会在您的硬盘驱动器上留下名为 hs_err_pidXXXX.log
的文件(通常在Linux上的/tmp/
。请查看是否可以找到并尝试将Java升级到最新版本。
弹性研究突然消失的第二个可能原因是oom-killer。当系统内存不足时,这是一个启动并杀死最大进程(在您的情况下为elasticsearch)的进程。检查系统日志和kern.log在上次时间弹性搜索消失的时间。如果你看到这样的消息
Out of memory: Kill process 1234 (java) score 567 or sacrifice child
您可能需要减少elasticsearch堆大小,以便为操作系统留出更多内存或升级到更大的实例。
答案 1 :(得分:1)
我遇到了同样的麻烦:
我的解决方案是删除sigar lib:
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 lib
更新2:要弄清楚,在启动elasticsearch时添加这些选项:
-XX:HeapDumpPath = / java_pid.hprof
堆转储的目录或文件名的路径。管理。
-XX:-HeapDumpOnOutOfMemoryError
在抛出java.lang.OutOfMemoryError时将堆转储到文件。
将有助于调试