Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Настроить Elasticsearch ›Важная системная настройка

Обеспечение того, чтобы временная директория JNA разрешала исполняемые файлы

Это актуально только для Linux.

Elasticsearch использует библиотеку Java Native Access (JNA) и другую библиотеку под названием libffi для выполнения некоторых зависящих от платформы нативных кодов. В Linux нативный код, лежащий в основе этих библиотек, извлекается во время выполнения в временную директорию, а затем отображается в исполняемые страницы адресного пространства Elasticsearch. Это требует, чтобы базовые файлы не находились на файловой системе, смонтированной с опцией noexec.

По умолчанию Elasticsearch создает свою временную директорию внутри /tmp. Однако некоторые усиленные установки Linux монтируют /tmp с опцией noexec по умолчанию. Это предотвращает правильную работу JNA и libffi. Например, при запуске JNA может не загрузиться с исключением java.lang.UnsatisfiedLinkerError или с сообщением, подобным failed to map segment from shared object, или libffi может сообщить сообщение, подобное failed to allocate closure. Обратите внимание, что сообщения об исключениях могут отличаться в зависимости от версий JVM. Кроме того, компоненты Elasticsearch, которые полагаются на выполнение нативного кода через JNA, могут завершиться сообщениями, указывающими, что это because JNA is not available.

Чтобы решить эти проблемы, необходимо либо удалить опцию noexec из вашей файловой системы /tmp, либо настроить Elasticsearch на использование другого расположения для своей временной директории, установив переменную среды $ES_TMPDIR. Например:

  • Если вы запускаете Elasticsearch непосредственно из командной строки, установите $ES_TMPDIR следующим образом:

    export ES_TMPDIR=/usr/share/elasticsearch/tmp
  • Для установок, выполненных с помощью пакетов RPM или DEB, переменную среды необходимо установить через файл конфигурации системы.
  • Если вы используете systemd для запуска Elasticsearch как службы, добавьте следующую строку в раздел [Service] в файле переопределения службы:

    Environment=ES_TMPDIR=/usr/share/elasticsearch/tmp

Если вам нужен более точный контроль над расположением этих временных файлов, вы также можете настроить путь, используемый JNA, с помощью флага JVM -Djna.tmpdir=<path> и настроить путь, используемый libffi для своих временных файлов, установив переменную среды LIBFFI_TMPDIR. Будущие версии Elasticsearch могут потребовать дополнительной конфигурации, поэтому предпочтительно устанавливать ES_TMPDIR всякий раз, когда это возможно.

Elasticsearch не удаляет свою временную директорию. Вы должны удалить оставшиеся временные директории, пока Elasticsearch не запущен. Лучше всего сделать это автоматически, например, при каждом перезапуске. Если вы работаете в Linux, вы можете добиться этого, используя файловую систему tmpfs.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/executable-jna-tmpdir.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API