3.4.6. JNA 临时目录禁止使用 noexec 装载
注意:这仅与 Linux 有关
Elasticsearch 使用 Java 本机访问 (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 版本之间,异常消息可能有所不同。此外,依赖于通过 JNA 执行本机代码的 Elasticsearch 组件将失败,并显示消息 because JNA is not available
。如果看到此类错误消息,则必须重新挂载用于 JNA 的临时目录,以使其不通过 noexec
进行挂载。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。