由于JNA,在RHEL 7.8上安装Elastic 7.5会导致内存冲突sig = 6

问题描述

我正在OS:Red Hat Enterprise Linux Server 7.8(Maipo)操作系统上安装全新的Elasticsearch 7.5

在启动服务时,我遇到了严重的失败。这是服务信息所提供的

● 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,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,我已经通过在 / etc / sysconfig / elasticsearch 添加 ES_TMPDIR = / var / es-temp 来修复有关 JNA 的问题>作为

/var/es-temp

内存似乎正常。这是一个全新的VM。 (没有应用程序登录到/ var / logs) 似乎应该支持此版本 我使用-xms2g -Xmx2g,-xms1g -Xmx1g,-xms512m -Xmx512m进行了测试,但是存在相同的错误

我不明白怎么了。我的下一步是测试Elasticsearch的另一个版本7。

解决方法

经过1天的努力,我在Ivan_A_Carrazana_C的https://discuss.elastic.co/t/elasticsearch-v7-6-2-failed-to-start-killed-by-sigabrt-on-rhel-7-7-urgent/231039/11找到了解决方案

我在这里放置了执行步骤的副本:

嗨 如果要在RHEL安装中应用安全合规性,则必须更改将使用Elasticsearch作为Java的TMP目录的路径。

在/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,noexec,seclabel) 在/ etc / fstab中添加或修改以下行: tmpfs /dev/shm tmpfs defaults,nosuid 0 0

我遇到了同样的问题,这对我有用。希望我能帮助您

似乎是众所周知的,但没有正确记录。不要理解为什么tmpfs应该在noexec中。希望得到JNA专家的反馈。

,

由于某种原因,将TMPDIR var添加到/ etc / sysconfig / elasticsearch起作用(在7.7.1上),并将其指向与-Djava.io.tmpdir相同的位置。

即 TMPDIR =“ / usr / share / elasticsearch / tmp” (就我而言,我实际上使用了具有0755权限的/ var / lib / elasticsearch / tmp)。

我不能说为什么,并且如果我查看'ps -aef',它也不会更改使用的调用字符串。但是仅仅拥有-Djava.io.tmpdir是不够的。

这使我能够在不删除/ tmp和/ dev / shm上的noexec的情况下正常工作。