首页 > 解决方案 > 由于 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/es-temp

记忆似乎还不错。这是一个全新的虚拟机。(没有应用程序登录到 /var/logs)似乎应该支持这个版本我用 -Xms2g -Xmx2g, -Xms1g -Xmx1g, -Xms512m -Xmx512m 测试但同样的错误。

我不明白出了什么问题。我的下一步是使用另一个版本 7 的 elasticsearch 进行测试。

标签: elasticsearchrhel7

解决方案


经过 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 专家对此的反馈。


推荐阅读