[[system-config]]
== Important system configuration

Ideally, {es} 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 {es} to access more
resources than allowed by default.

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

* <<setting-system-settings,Configure system settings>>
* <<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, {es} 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
{es} node.

As soon as you configure a network setting like `network.host`, {es}
assumes that you are moving to production and will upgrade the above warnings
to exceptions. These exceptions will prevent your {es} 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[]
