1、堆内存检查
1)、若设置bootstrap.memory_lock为true,jvm将会锁定初始堆内存;若初始堆大小不等于最大堆内存,在调整堆内存大小之后jvm堆不可能均锁定在内存中;
2)、若要通过堆内存大小校验,则需配置堆的大小;
2、文件描述符检查:
1)、文件描述符是unix系统的一个结构,用于操作文件,unix系统当中一切皆文件,文件可以是物理的文件、虚拟的文件(/proc/loadavg)或者网络套接字;
2)、ES需要大量的文件描述符,每个分片有多个segments和其他文件组成,加上与其它节点之间的连接等;检查主要针对OS X和Linux系统;
3、最大线程数检查:
1)、ES执行请求会将请求拆分成多个阶段,然后在不同的阶段使用不同的线程池去执行,因此ES需要能够创建大量的线程;
2)、最大线程数校验是为了确保ES在通常情况下可以创建足够的线程数,该校验在Linux系统上是强制执行的;若使用Linux系统,必须要配置ES最低能创建4096个线程;Linux系统可通过配置文件/etc/security/limits.conf使用nproc来设置;
4、文件大小检查:
1)、segment文件作为单个分片的组件以及translog文件可以非常大(达到数GB);系统上若限制es进程产生超过最大文件大小的文件将会导致写失败,为避免这种情况,一种安全的做法就是不限制最大文件大小,而这也是文件大小校验目的;
2)、若要通过文件大小检查,则需要配置允许ES进程创建文件无大小限制;Linux可通过配置文件/etc/security/limits.conf使用fsize来设置;
5、最大虚拟内存检查:
1)、ES和Lucene使用mmap可以很好地将索引的一部分映射到es内存地址空间内,这将某些索引数据放在jvm堆内存之外但是在系统内存之内以实现快速访问;为了使该方法有效,应该使ES拥有无限制的内存地址空间;
2)、该项在Linux系统中强制检查,要通过该步骤,需要在系统中通过增加’ - as unlimited’配置到/etc/security/limits.conf文件中;
6、客户端虚拟机检查:
1)、open jdk派生的jvm有两种不同的jvm: client jvm和server jvm;这些jvm使用不同的编译器将java字节码变成可执行的机器码;
2)、client jvm侧重于应用启动时间少以及内存占用低,而server jvm侧重于最大化代码性能,两种jvm之间的性能差异很大;
3)、client jvm检查就是确保es不在client jvm模式下运行,所以启动ES需要在server jvm下启动,现在系统默认都是以server jvm模式启动;
7、串行垃圾收集器(serial collector)使用检查:
1)、针对不同的工作负载open jdk派生的jvm拥有不同的垃圾收集器,串行垃圾收集器(serial collector)适用于单核cpu机器或者堆内存很小的情况下使用,而这两种情况都不适合运行ES,将串行垃圾收集器(serial collector)与ES共同使用将极大地限制ES的性能;
2)、为避免这种情况需要确保ES没有配置串行垃圾收集器(serial collector),ES启动时不要配置串行垃圾收集器(serial collector),默认使用CMS收集器;
8、g1 gc检查:
已知jdk8中附带的HotSpot jvm早期版本存在一些问题,当启用g1 gc收集器时,因为jvm的问题可能会导致索引损坏;受影响的版本早于jdk 8u40版本附带的HotSpot,而g1 gc检查会检测到这些早起版本的HostSpot jvm;
9、集群发现检查:
默认情况下,ES启动时会在同一主机上取发现其它运行的节点,若在几秒钟内未发现master节点,则ES将形成一个包含其它已发现节点的集群;这在开发环境无需额外就可形成集群非常有用,但对于生产环境则不适用,因为这样可能会因为脑裂形成多个集群从而丢失数据;