无法加载JNA本机支持库Elasticsearch 6.x

Gag*_*ous 6 linux mount umask jna elasticsearch

我已经在中安装了Elasticsearch6.x Debian 7 (wheezy)。我尝试从开始service elasticsearch start但它给我一个错误信息

root@debian:~# sudo -i service elasticsearch start
[FAIL] Starting Elasticsearch Server: failed!
Run Code Online (Sandbox Code Playgroud)

我尝试查看位于的elasticsearch日志文件nano /var/log/elasticsearch/elasticsearch.log,但出现此错误

[2017-12-14T11:25:39,153][WARN ][o.e.b.Natives            ] unable to load JNA native support library, native methods will be disabled.
java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/linux-x86/libjnidispatch.so) not found in resource path ([file:/usr/share/elasticsearch/lib/lucene-spatial-$
        at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:962) ~[jna-4.4.0-1.jar:4.4.0 (b0)]
        at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922) ~[jna-4.4.0-1.jar:4.4.0 (b0)]
        at com.sun.jna.Native.<clinit>(Native.java:190) ~[jna-4.4.0-1.jar:4.4.0 (b0)]
        at java.lang.Class.forName0(Native Method) ~[?:1.8.0_151]
        at java.lang.Class.forName(Class.java:264) ~[?:1.8.0_151]
        at org.elasticsearch.bootstrap.Natives.<clinit>(Natives.java:45) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:103) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) [elasticsearch-cli-6.1.0.jar:6.1.0]
        at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) [elasticsearch-6.1.0.jar:6.1.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) [elasticsearch-6.1.0.jar:6.1.0]
[2017-12-14T11:25:39,212][WARN ][o.e.b.Natives            ] cannot check if running as root because JNA is not available
[2017-12-14T11:25:39,212][WARN ][o.e.b.Natives            ] cannot install system call filter because JNA is not available
[2017-12-14T11:25:39,215][WARN ][o.e.b.Natives            ] cannot register console handler because JNA is not available
[2017-12-14T11:25:39,256][WARN ][o.e.b.Natives            ] cannot getrlimit RLIMIT_NPROC because JNA is not available
[2017-12-14T11:25:39,256][WARN ][o.e.b.Natives            ] cannot getrlimit RLIMIT_AS beacuse JNA is not available
[2017-12-14T11:25:39,256][WARN ][o.e.b.Natives            ] cannot getrlimit RLIMIT_FSIZE because JNA is not available
Run Code Online (Sandbox Code Playgroud)

我该如何解决?我已经安装了Java,version javac 1.8.0_151

我的代码有什么问题?`

Sef*_*eff 9

我在通过 YUM 安装了 ElasticSearch 7.8 的 CentOS7 cPanel 服务器上遇到了同样的问题。根据答案,我做了以下事情:

  1. 设置ES_JAVA_OPTS="-Djna.tmpdir=/var/lib/elasticsearch/tmp"/etc/sysconfig/elasticsearch
  2. mkdir -p /var/lib/elasticsearch/tmp
  3. chown -R elasticsearch.elasticsearch /var/lib/elasticsearch/tmp


小智 6

  1. 转到/ etc / sysconfig / elasticsearch
  2. 添加ES_JAVA_OPTS =“-Djna.tmpdir = / var / lib / elasticsearch / tmp”
  3. 开始elasticsearch。
  4. 您现在可以看到在/ var / lib / elasticsearch /中创建的tmp文件夹。
  5. 此文件夹应具有“ elasticsearch”用户的执行权限
  6. 使用namei -l / var / lib / elasticsearch检查权限
  7. dr-xr-xr-x root root / drwxr-xr-x root root var drwxr-xr-x root root lib drwxr-x --- elasticsearch elasticsearch elasticsearch

希望您的问题能得到解决。

  • 似乎我找不到这个 /etc/sysconfig/elasticsearch,我只看到 /etc (2认同)
  • 是的,这是完美的修复。我还在 Centos 7 Cpanel /WHM https://discuss.elastic.co/t/elasticsearch-no-longer-works-under-systemd-7-4-0-on-centos-7- 上使用相同的方法进行了修复7-1908/201846/4 (2认同)

dep*_*pfx 5

检查/tmp/目录的权限。它一定有noexec

/tmp需要exec支持JNA。解决方法是tmp在elasticsearch sysconfig文件中指定目录。

就像是 export JAVA_OPTS="-Djava.io.tmpdir=$ES_HOME/tmp"

确保存在$ES_HOME/tmp目录,并且elasticsearch用户对此目录具有写权限。

我在使用强化的操作系统时遇到了这个问题,也因为默认的umask是0027


Gag*_*ous 0

好吧我已经找到解决方案了。显然,我的虚拟机内存存储 (RAM) 为 1 GB - 2 GB,因此我将虚拟机的 RAM 容量增加到至少 4GB,然后重新启动计算机。弹性搜索开始工作得很好。