elasticsearch - 由于 JNA,在 RHEL 7.8 上安装 elastic 7.5 会导致内存违规 sig=6
问题描述
我正在操作系统上安装全新的 elasticsearch 7.5:Red Hat Enterprise Linux Server release 7.8 (Maipo)
在服务启动时,我遇到了硬故障。这是服务信息提供的内容
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
Active: failed (Result: signal) since Tue 2020-08-25 11:34:39 CEST; 7min ago
Docs: http://www.elastic.co
Process: 102777 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet (code=killed, signal=ABRT)
Main PID: 102777 (code=killed, signal=ABRT)
CGroup: /system.slice/elasticsearch.service
Aug 25 11:34:34 sv-1348lvd44.esante.local systemd[1]: Starting Elasticsearch...
Aug 25 11:34:35 sv-1348lvd44.esante.local elasticsearch[102777]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated...lease.
Aug 25 11:34:39 sv-1348lvd44.esante.local systemd[1]: elasticsearch.service: main process exited, code=killed, status=6/ABRT
Aug 25 11:34:39 sv-1348lvd44.esante.local systemd[1]: Failed to start Elasticsearch.
Aug 25 11:34:39 sv-1348lvd44.esante.local systemd[1]: Unit elasticsearch.service entered failed state.
Aug 25 11:34:39 sv-1348lvd44.esante.local systemd[1]: elasticsearch.service failed.
使用 journalctl -xe 时
Aug 25 11:34:38 sv-1348lvd44.esante.local audispd[824]: node=sv-1348lvd44.esante.local type=ANOM_ABEND msg=audit(1598348078.836:208066): auid=429496 uid=995 gid=991 ses=4294967295 subj=system_u:system_r:unconfined_service_t:s0 pid=102777 comm="java" reason="memory violation" sig=6
Aug 25 11:34:39 sv-1348lvd44.esante.local systemd[1]: elasticsearch.service: main process exited, code=killed, status=6/ABRT
Aug 25 11:34:39 sv-1348lvd44.esante.local systemd[1]: Failed to start Elasticsearch.
在查看我的转储 hs_err_pidXXXX 时。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f4818939b85, pid=52870, tid=52933
#
# JRE version: OpenJDK Runtime Environment (13.0.1+9) (build 13.0.1+9)
# Java VM: OpenJDK 64-Bit Server VM (13.0.1+9, mixed mode, sharing, tiered, compressed oops, concurrent mark sweep gc, linux-amd64)
# Problematic frame:
# C [jna515356041985641679.tmp+0x12b85] ffi_prep_closure_loc+0x15
[OS:Red Hat Enterprise Linux Server release 7.8 (Maipo)
uname:Linux 3.10.0-1127.10.1.el7.x86_64 #1 SMP Tue May 26 15:05:43 EDT 2020 x86_64
libc:glibc 2.17 NPTL 2.17
rlimit: STACK 8192k, CORE 0k, NPROC 4096, NOFILE 65535, AS infinity, DATA infinity, FSIZE infinity
load average:0.08 0.03 0.05
.../...
它在 CentOS 上就像一个魅力,无需做任何事情。
对于 RHEL,我已经通过将ES_TMPDIR =/var/es-temp添加到/etc/sysconfig/elasticsearch作为
记忆似乎还不错。这是一个全新的虚拟机。(没有应用程序登录到 /var/logs)似乎应该支持这个版本我用 -Xms2g -Xmx2g, -Xms1g -Xmx1g, -Xms512m -Xmx512m 测试但同样的错误。
我不明白出了什么问题。我的下一步是使用另一个版本 7 的 elasticsearch 进行测试。
解决方案
经过 1 天的挣扎,我在https://discuss.elastic.co/t/elasticsearch-v7-6-2-failed-to-start-killed-by-sigabrt-on-rhel-7-7找到了解决方案-紧急/231039/11来自 Ivan_A_Carrazana_C
我把要执行的步骤的副本放在这里:
嗨,如果您在 RHEL 安装中应用安全合规性,则必须更改将弹性搜索用作 Java 的 TMP 目录的 >path。
在 /etc/elasticsearch/jvm.options 取消注释
-Djava.io.tmpdir=${ES_TMPDIR}
添加到 /etc /sysconfig/elasticsearch
ES_TMPDIR=/usr/share/elasticsearch/tmp
创建/usr/share/elasticsearch/tmp目录,并确保所有者和组>是elasticsearch,权限是0755
最后确保 /dev/shm 没有带有命令的 noexec 属性:
mount | grep tmpfs | grep '/dev/shm'
预期结果:tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
如果您得到如下输出:
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,seclabel)
在 /etc/fstab 中添加或修改以下行:tmpfs /dev/shm tmpfs defaults,nodev,nosuid 0 0
我有同样的问题,这对我有用。希望我能帮助你
似乎弹性已知但未正确记录。不明白为什么 tmpfs 应该在 noexec 中。最好有 JNA 专家对此的反馈。
推荐阅读
- javascript - 带有复选框的 Laravel 产品过滤器
- dialogflow-es - 如何处理与实体值不匹配的值?
- matlab - 如何将二进制值列表转换为 int32 类型?
- java - 在 Oreo 及更高版本上查找 DNS MX 记录
- javascript - 如何在 jquery/js 中用 response.data 替换括号 [] 之间的文本?
- java - 关闭选项卡后获取焦点选项卡
- python - 如何计算连续的大写和小写字母?
- angularjs - Angularjs 确认模式作为带有动作的指令
- javascript - 如何检查带逗号的字符串是否大于 232.68
- jenkins - 如何将 Nuget 包“.nupkg”部署到 IIS