[[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 addressed before going to production:

* <<heap-size,Set JVM heap size>>
* <<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>>

[[dev-vs-prod]]
[float]
=== 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/heap_size.asciidoc[]

include::sysconfig/swap.asciidoc[]

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

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

include::sysconfig/threads.asciidoc[]



