[[system-config]]
== Important System Configuration

Ideally, Elasticsearch should run alone on a server and use all of the
resources available to it. In order to do so, you need to configure your
operating system to allow the user running Elasticsearch to access more
resources than allowed by default.

The following settings *must* be considered before going to production:

* <<setup-configuration-memory,Disable swapping>>
* <<file-descriptors,Increase file descriptors>>
* <<vm-max-map-count,Ensure sufficient virtual memory>>
* <<max-number-of-threads,Ensure sufficient threads>>
* <<networkaddress-cache-ttl,JVM DNS cache settings>>
* <<executable-jna-tmpdir,Temporary directory not mounted with `noexec`>>
* <<system-config-tcpretries,TCP retransmission timeout>>

[[dev-vs-prod]]
[discrete]
=== Development mode vs production mode

By default, Elasticsearch assumes that you are working in development mode.
If any of the above settings are not configured correctly, a warning will be
written to the log file, but you will be able to start and run your
Elasticsearch node.

As soon as you configure a network setting like `network.host`, Elasticsearch
assumes that you are moving to production and will upgrade the above warnings
to exceptions. These exceptions will prevent your Elasticsearch node from
starting. This is an important safety measure to ensure that you will not
lose data because of a malconfigured server.

include::sysconfig/configuring.asciidoc[]

include::sysconfig/swap.asciidoc[]

include::sysconfig/file-descriptors.asciidoc[]

include::sysconfig/virtual-memory.asciidoc[]

include::sysconfig/threads.asciidoc[]

include::sysconfig/dns-cache.asciidoc[]

include::sysconfig/executable-jna-tmpdir.asciidoc[]

include::sysconfig/tcpretries.asciidoc[]
