es性能调优
成都的es集群经常出现告警,查看日志发现
[gc][11534155] overhead, spent [38.3s] collecting in the last [38.6s]
这是 JVM 垃圾回收过程中的一条日志,表示在最近 38.6 秒内,JVM 进行了一次 GC (Garbage Collection) 的操作,回收垃圾所占用的内存。这条日志的含义是,在这次 GC 中,有很大一部分时间(38.3 秒)是用于处理 GC 相关的开销(例如标记垃圾、整理内存等),而不是实际回收垃圾。
这可能是因为堆内存中的对象数量太多,导致 GC 操作变得缓慢。可以尝试通过调整 JVM 的垃圾回收策略、调整堆内存大小等方式来优化性能。
这里谈谈jvm的垃圾回收策略
- -XX:+UseSerialGC:使用串行垃圾回收器;
- -XX:+UseParallelGC:使用并行垃圾回收器;
- -XX:+UseParallelOldGC:使用并行老年代垃圾回收器;
- -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器;
- -XX:+UseG1GC:使用G1垃圾回收器;
- -XX:NewRatio:新生代和老年代的比例;
- -XX:SurvivorRatio:Eden区域和Survivor区域的比例;
- -XX:MaxHeapSize:JVM最大堆内存大小。
一般来说,使用 G1 垃圾收集器可能比较适合 Elasticsearch。G1 是一种面向服务端应用的低延迟、高吞吐量垃圾回收器,可以根据内存使用情况动态地调整堆内存的分配比例,并且不会出现长时间的停顿。
下面是g1垃圾回收器的常用参数
- -XX:+UseG1GC:启用G1垃圾回收器。
- -XX:G1HeapRegionSize=n:指定每个Heap区域的大小,可以控制最小的内存分配单元。
- -XX:MaxGCPauseMillis=n:指定期望的最大GC停顿时间(毫秒)。
- -XX:G1NewSizePercent=n:指定新生代大小相对于堆大小的百分比。
- -XX:G1MaxNewSizePercent=n:指定新生代最大大小相对于堆大小的百分比。
- -XX:G1ReservePercent=n:指定保留的空间百分比,以便在需要时可以快速分配内存。
- -XX:InitiatingHeapOccupancyPercent=n:指定当堆被占用的比例达到指定阈值时,启动并发标记周期。-
- -XX:G1HeapWastePercent=n:指定堆中允许浪费的最大空间百分比。
除了垃圾回收器的选择之外,还可以调整 Elasticsearch 的垃圾回收策略参数。例如,可以调整堆内存的大小、垃圾回收的线程数、垃圾回收的阈值等参数,以达到更好的垃圾回收效果。具体的调整方法可以参考 Elasticsearch 的官方文档,以及相关的调优指南。
启用g1垃圾回收器
要在 Elasticsearch 6.3.2 中启用 G1 垃圾回收器,需要进行以下步骤(将其他垃圾回收器关掉):
编辑 Elasticsearch 的 JVM 配置文件 config/jvm.options,加入以下参数:
-XX:+UseG1GC
-XX:G1ReservePercent=25
-XX:InitiatingHeapOccupancyPercent=30
-XX:MaxGCPauseMillis=200
-XX:+ParallelRefProcEnabled
-XX:-OmitStackTraceInFastThrow
其中,-XX:+UseG1GC 启用 G1 垃圾回收器,其余参数用于优化 G1 的性能和行为。
确认 Elasticsearch 进程的运行用户并给予该用户对 Elasticsearch 安装目录及其子目录的读写权限。