MobileFirst Analytics Server uses
an embedded Elasticsearch library for the data store and cluster management.
Because it intends to be a highly performant in-memory search and
query engine, requiring fast disk I/O, you must follow some production
system requirements. In general, you are most likely to run out of
memory and disk (or discover that disk I/O is your performance bottleneck)
before CPU becomes a problem. In a clustered environment, you want
a fast, reliable, co-located cluster of nodes.
Operating system
- CentOS/RHEL 6.x/7.x
- Oracle Enterprise Linux 6/7
with RHEL Kernel only
- Ubuntu 12.04/14.04
- SLES 11/12
- OpenSuSE 13.2
- Windows Server 2012/R2
- Debian 7
JVM
- Oracle JVM 1.7u55+
- Oracle JVM 1.8u20+
- IcedTea OpenJDK 1.7.0.55+
Hardware
- RAM: More RAM is better, but no more than 64 GB per node. 32 GB
and 16 GB are also acceptable. Less than 8 GB requires many small
nodes in the cluster, and 64 GB is wasteful and problematic due to
the way Java™ uses memory for
pointers.
- Disk: Use SSDs when possible, or fast spinning traditional disks
in RAID 0 configuration if SSDs are not possible.
- CPU: CPU tends not to be the performance bottleneck. Use systems
with 2 to 8 cores.
- Network: When you cross into the need to scale out horizontally,
you need a fast, reliable, data center with 1 GbE to 10 GbE supported
speeds.
Hardware configuration
- Give your JVM half of the available RAM, but do not cross 32 GB
- Setting the ES_HEAP_SIZE environment variable
to 32g.
- Setting the JVM flags by using -Xmx32g -Xms32g.
- Turn off disk swap. Allowing the operating system to swap heap
on and off disk significantly degrades performance.
- Temporarily: sudo swapoff -a
- Permanently: Edit /etc/fstab according to
the operating system documentation.
- If neither option is possible, set the Elasticsearch option bootstrap.mlockall:
true (this value is the default in the embedded Elasticsearch
instance).
- Increase the allowed open file descriptors.
- Linux typically limits
a per-process number of open file descriptors to a small 1024.
- Consult your operating system documentation for how to permanently
increase this value to something much larger, like 64,000.
- Elasticsearch also uses a mix of NioFS and MMapFS for the various
files. Increase the maximum map count so plenty of virtual memory
is available for mmapped files.
- Temporarily: sysctl -w vm.max_map_count=262144
- Permanently: Modify the vm.max_map_count setting
in your /etc/sysctl.conf.
- If you use BSDs and Linux,
ensure that your operating system I/O scheduler is set to deadline or noop,
not cfq.