高阶配置与调优

高阶配置与调优 #

面向生产环境的高级配置与性能调优指南。

系统级配置 #

文档内容
NUMA 配置NUMA 优化配置
NVME 配置NVME 存储优化
RAID 配置RAID 阵列配置
磁盘加密数据安全加密
国密配置国密算法支持
TLS 安全配置SSL/TLS 安全通信

高级调优 #

文档内容
集群协调调优选举、故障检测、集群状态发布参数调优
Ingest Pipeline 配置Pipeline 管理、Processor 使用、性能调优
索引排序索引排序配置与提前终止优化
高级配置参数484 个配置参数完整参考

❓ 常见问题解答 #

Q1: Easysearch 服务启动很慢,如何加速? #

原因分析:

  1. JVM 参数不合理(堆大小、GC 算法)
  2. 集群发现耗时
  3. 索引加载耗时

解决步骤:

# 1. 检查 JVM 配置
jcmd <pid> VM.flags | grep -E "Xmx|Xms|UseG1GC"

# 2. 优化 JVM 启动参数
-Xms16g
-Xmx16g
-XX:+UseG1GC
-XX:+AlwaysPreTouch  # 启动时预分配内存

# 3. 检查集群发现配置
discovery.seed_hosts: [node1, node2]

Q2: 查询响应时间很长(>1s),如何优化? #

快速诊断:

# 启用慢查询日志
PUT /_cluster/settings
{
  "persistent": {
    "index.search.slowlog.threshold.query.warn": "500ms"
  }
}

# 获取慢查询
GET /.slowlog-*/_search?size=10&sort=timestamp:desc

常见原因和解决方案:

原因症状解决方案
缓存未命中相同查询每次都慢启用查询缓存
Bool 查询过复杂CPU 占用高展平查询、使用 terms
排序字段多值排序时间长使用索引排序
GC 停顿间歇性延迟调整 GC 算法
线程池拒绝查询超时增加线程池大小

Q3: 磁盘占用快速增长,如何控制? #

诊断方法:

# 查看分片大小
GET /_cat/shards?v&h=index,shard,size,store

# 查看索引大小
GET /_cat/indices?v&h=index,store.size&sort=store.size:desc

常见原因和解决方案:

原因症状解决方案
索引未合并段数多、磁盘占用大强制合并
Translog 未清理translog.log 很大刷新索引
编码器选择不当压缩率低使用 best_compression
索引排序过多索引大小 +50%减少排序字段数

Q4: 内存占用持续增长,最后 OOM,怎么办? #

紧急处理:

# 立即增加堆大小(重启生效)
-Xmx32g  # 从当前值增加 50%

# 启用 OOM 诊断
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./dumps/

根本原因诊断:

# 监控缓存大小
GET /_stats/query_cache

# 分析堆转储
jmap -dump:live,format=b,file=heap.bin <pid>

Q5: 集群不稳定,频繁出现节点掉线,怎么排查? #

诊断步骤:

# 查看集群健康状态
GET /_cluster/health?pretty

# 查看节点状态
GET /_cat/nodes?v&h=name,status,load,heap.percent,cpu

# 查看主节点日志
grep -i "master" logs/easysearch.log | tail -20

常见原因和解决方案:

原因症状解决方案
主节点发现超时频繁重选主调整心跳超时参数
GC 停顿长节点假死优化 JVM 配置
网络不稳定间歇性连接问题增加心跳重试次数
线程池队列满请求拒绝增加线程池大小
磁盘空间不足索引无法写入扩展磁盘或删除旧索引

Q6: CPU 占用率很高(>80%),如何降低? #

诊断方法:

# 查看热线程
GET /_nodes/hot_threads?threads=5

# 查看线程池统计
GET /_cat/thread_pool?v&h=name,active,queue,rejected

常见原因和解决方案:

原因症状解决方案
复杂查询search 线程 CPU 高简化查询结构
合并操作merge 线程 CPU 高控制合并频率
GC 频繁GC 线程 CPU 高优化 JVM 堆大小
排序操作search/merge CPU 高使用索引排序

Q7: 如何选择合适的 GC 算法? #

快速决策表:

Java 版本堆大小推荐算法理由
Java 8-11<8GBCMS 或 G1GC低延迟
Java 8-11>8GBG1GC自适应
Java 12-14任意G1GC成熟稳定
Java 15+<16GBG1GC通用
Java 15+>16GBZGC极低停顿

相关文档 #