我正在尝试在 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