原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/executable-jna-tmpdir.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/executable-jna-tmpdir.html
本地英文版地址: ../en/executable-jna-tmpdir.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
这仅与Linux相关。
Elasticsearch 使用 Java Native Access (JNA) 库来执行一些平台相关的本地代码。 在 Linux 上,支持这个库的本地代码是在运行时从 JNA 档案中提取的。
默认情况下,这段代码被提取到 Elasticsearch 临时目录中,该目录默认为 /tmp
的子目录。
或者,可以用 JVM 标志 -Djna.tmpdir=<path>
来控制这个位置。
由于本地库作为可执行文件被映射到 JVM 虚拟地址空间中,因此提取此代码的位置的底层挂载点 不能 使用 noexec
来挂载,因为这会阻止 JVM 进程将此代码映射为可执行文件。
在一些强化的 Linux 安装上,这是 /tmp
的默认挂载选项。
使用 noexec
挂载底层的一个迹象是,在启动时,JNA 抛出 java.lang.UnsatisfiedLinkerError
异常而无法加载,并显示一条像 failed to map segment from shared object
这样的消息。
注意,不同 JVM 版本的异常消息可能不同。
此外,Elasticsearch 依赖于通过 JNA 执行本地代码的组件将会失败,并显示指示 because JNA is not available
的消息。
如果你看到这样的错误消息,必须重新挂载用于 JNA 的临时目录,以不使用 noexec
的方式进行挂载。