在 CentOS 7 上使用 elasticsearch 进行 systemd 和 max 打开文件

在 CentOS 7 上使用 elasticsearch 进行 systemd 和 max 打开文件

我正在尝试在 CentOS 7 上为 elasticsearch 设置最大打开文件数。我反复阅读了如何设置它,但似乎不起作用。据我了解:

  • limits.conf 无关紧要,因为 elasticsearch 用户设置为 /sbin/nologin,并且我们使用系统启动守护进程
  • 我需要LimitNOFILE=65535在 systemd 单元文件中进行设置。

所以,我继续这样做,这是我的单元文件,它由elasticsearch puppet 模块

[Unit]
Description=Starts and stops a single elasticsearch instance on this system
Documentation=http://www.elasticsearch.org

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/elasticsearch-graylog2
User=elasticsearch
Group=elasticsearch
PIDFile=/var/run/elasticsearch/elasticsearch-graylog2.pid
ExecStart=/usr/share/elasticsearch/bin/elasticsearch -d -p /var/run/elasticsearch/elasticsearch-graylog2.pid -Des.default.path.home=${ES_HOME} -Des.default.path.logs=${LOG_DIR} -Des.default.path.data=${DATA_DIR} -Des.default.path.work=${WORK_DIR} -Des.default.path.conf=${CONF_DIR}
# See MAX_OPEN_FILES in sysconfig
LimitNOFILE=65535
# See MAX_LOCKED_MEMORY in sysconfig, use "infinity" when MAX_LOCKED_MEMORY=unlimited and using bootstrap.mlockall: true

# Shutdown delay in seconds, before process is tried to be killed with KILL (if configured)
TimeoutStopSec=20

[Install]
WantedBy=multi-user.target

注意limitNOFILE这里是如何设置的。我还在 EnvironmentFile 中设置了 MAX_OPEN_FILES:

CONF_DIR=/etc/elasticsearch/graylog2
CONF_FILE=/etc/elasticsearch/graylog2/elasticsearch.yml
ES_GROUP=elasticsearch
ES_HOME=/usr/share/elasticsearch
ES_USER=elasticsearch
LOG_DIR=/var/log/elasticsearch/graylog2
MAX_OPEN_FILES=65535

然而,elasticsearch 仍然报告最大打开文件数为 4096,无论是在应用程序内部,还是在/proc/<pid>/limits

有人知道我在这里做错了什么吗?我甚至尝试从内部进行设置,limits.conf但正如我所料,没有成功。

答案1

我这样做了:

/etc/security/limits.d/elasticuser
# Default limit for number of open files for elastic user
elastic hard nofile 65536

并像你一样将其包含在 systemd 中

LimitNOFILE=65536

看起来不错

答案2

用户不能设置为 /sbin/nologin,这是其 shell 的路径。因此您需要调整 limits.conf

相关内容