167 lines
5.9 KiB
Plaintext
167 lines
5.9 KiB
Plaintext
[[setting-system-settings]]
|
|
=== Configuring system settings
|
|
|
|
Where to configure systems settings depends on which package you have used to
|
|
install Elasticsearch, and which operating system you are using.
|
|
|
|
When using the `.zip` or `.tar.gz` packages, system settings can be configured:
|
|
|
|
* temporarily with <<ulimit,`ulimit`>>, or
|
|
* permanently in <<limits.conf,`/etc/security/limits.conf`>>.
|
|
|
|
When using the RPM or Debian packages, most system settings are set in the
|
|
<<sysconfig,system configuration file>>. However, systems which use systemd
|
|
require that system limits are specified in a
|
|
<<systemd,systemd configuration file>>.
|
|
|
|
[[ulimit]]
|
|
==== `ulimit`
|
|
|
|
On Linux systems, `ulimit` can be used to change resource limits on a
|
|
temporary basis. Limits usually need to be set as `root` before switching to
|
|
the user that will run Elasticsearch. For example, to set the number of
|
|
open file handles (`ulimit -n`) to 65,536, you can do the following:
|
|
|
|
[source,sh]
|
|
--------------------------------
|
|
sudo su <1>
|
|
ulimit -n 65536 <2>
|
|
su elasticsearch <3>
|
|
--------------------------------
|
|
<1> Become `root`.
|
|
<2> Change the max number of open files.
|
|
<3> Become the `elasticsearch` user in order to start Elasticsearch.
|
|
|
|
The new limit is only applied during the current session.
|
|
|
|
You can consult all currently applied limits with `ulimit -a`.
|
|
|
|
|
|
[[limits.conf]]
|
|
==== `/etc/security/limits.conf`
|
|
|
|
On Linux systems, persistent limits can be set for a particular user by
|
|
editing the `/etc/security/limits.conf` file. To set the maximum number of
|
|
open files for the `elasticsearch` user to 65,536, add the following line to
|
|
the `limits.conf` file:
|
|
|
|
[source,sh]
|
|
--------------------------------
|
|
elasticsearch - nofile 65536
|
|
--------------------------------
|
|
|
|
This change will only take effect the next time the `elasticsearch` user opens
|
|
a new session.
|
|
|
|
[NOTE]
|
|
.Ubuntu and `limits.conf`
|
|
===============================
|
|
Ubuntu ignores the `limits.conf` file for processes started by `init.d`. To
|
|
enable the `limits.conf` file, edit `/etc/pam.d/su` and uncomment the
|
|
following line:
|
|
|
|
[source,sh]
|
|
--------------------------------
|
|
# session required pam_limits.so
|
|
--------------------------------
|
|
===============================
|
|
|
|
|
|
[[sysconfig]]
|
|
==== Sysconfig file
|
|
|
|
When using the RPM or Debian packages, system settings and environment
|
|
variables can be specified in the system configuration file, which is located
|
|
in:
|
|
|
|
[horizontal]
|
|
RPM:: `/etc/sysconfig/elasticsearch`
|
|
Debian:: `/etc/default/elasticsearch`
|
|
|
|
However, for systems which uses `systemd`, system limits need to be specified
|
|
via <<systemd,systemd>>.
|
|
|
|
|
|
[[systemd]]
|
|
==== Systemd configuration
|
|
|
|
When using the RPM or Debian packages on systems that use
|
|
https://en.wikipedia.org/wiki/Systemd[systemd], system limits must be
|
|
specified via systemd.
|
|
|
|
The systemd service file (`/usr/lib/systemd/system/elasticsearch.service`)
|
|
contains the limits that are applied by default.
|
|
|
|
To override them, add a file called
|
|
`/etc/systemd/system/elasticsearch.service.d/override.conf` (alternatively,
|
|
you may run `sudo systemctl edit elasticsearch` which opens the file
|
|
automatically inside your default editor). Set any changes in this file,
|
|
such as:
|
|
|
|
[source,sh]
|
|
---------------------------------
|
|
[Service]
|
|
LimitMEMLOCK=infinity
|
|
---------------------------------
|
|
|
|
Once finished, run the following command to reload units:
|
|
|
|
[source,sh]
|
|
---------------------------------
|
|
sudo systemctl daemon-reload
|
|
---------------------------------
|
|
|
|
[[jvm-options]]
|
|
==== Setting JVM options
|
|
|
|
The preferred method of setting Java Virtual Machine options (including
|
|
system properties and JVM flags) is via the `jvm.options` configuration
|
|
file. The default location of this file is `config/jvm.options` (when
|
|
installing from the tar or zip distributions) and
|
|
`/etc/elasticsearch/jvm.options` (when installing from the Debian or RPM
|
|
packages). This file contains a line-delimited list of JVM arguments following
|
|
a special syntax:
|
|
- lines beginning with `#` are treated as comments and are ignored
|
|
- lines consisting only of whitespace are ignored
|
|
- lines beginning with a `-` are treated as a JVM option that applies
|
|
independent of the version of the JVM
|
|
- lines beginning with a number followed by a `:` followed by a `-` are treated
|
|
as a JVM option that applies only if the version of the JVM matches the
|
|
number
|
|
- lines beginning with a number followed by a `-` followed by a `:` are treated
|
|
as a JVM option that applies only if the version of the JVM is greater than
|
|
or equal to the number
|
|
- lines beginning with a number followed by a `-` followed by a `:` followed by
|
|
a `-` followed by a number are treated as a JVM option that applies only if
|
|
the version of the JVM falls in the range of the two numbers
|
|
- all other lines are rejected
|
|
|
|
|
|
You can add custom JVM flags to this file and
|
|
check this configuration into your version control system.
|
|
|
|
An alternative mechanism for setting Java Virtual Machine options is
|
|
via the `ES_JAVA_OPTS` environment variable. For instance:
|
|
|
|
[source,sh]
|
|
---------------------------------
|
|
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
|
|
./bin/elasticsearch
|
|
---------------------------------
|
|
|
|
When using the RPM or Debian packages, `ES_JAVA_OPTS` can be specified in the
|
|
<<sysconfig,system configuration file>>.
|
|
|
|
The JVM has a built-in mechanism for observing the `JAVA_TOOL_OPTIONS`
|
|
environment variable. We intentionally ignore this environment variable in our
|
|
packaging scripts. The primary reason for this is that on some OS (e.g., Ubuntu)
|
|
there are agents installed by default via this environment variable that we do
|
|
not want interfering with Elasticsearch.
|
|
|
|
Additionally, some other Java programs support the `JAVA_OPTS` environment
|
|
variable. This is *not* a mechanism built into the JVM but instead a convention
|
|
in the ecosystem. However, we do not support this environment variable, instead
|
|
supporting setting JVM options via the `jvm.options` file or the environment
|
|
variable `ES_JAVA_OPTS` as above.
|
|
|