大家好,我是 @search_engineer,今天分享一个生产环境常用的 Easysearch 性能调优案例。
背景
最近在生产环境中遇到一个典型场景:电商平台的商品搜索,日均查询量 500万+,高峰期 QPS 达到 2000。使用默认配置时,P99 延迟经常超过 500ms,用户体验很差。
优化过程
第一步:诊断问题
通过监控发现主要瓶颈:
- 分片过多 - 默认 5 主分片,导致大量小分片查询
- 堆内存不足 - 默认 1GB,频繁 GC
- 查询缓存未命中 - 相似查询重复计算
第二步:分片优化
# 索引设置
index.number_of_shards: 1
index.number_of_replicas: 1
index.refresh_interval: 30s
优化原理:
- 数据量 < 50GB 时,单分片性能更好
- 减少副本降低写入压力
- 延长刷新间隔减少段合并
第三步:内存调优
# jvm.options
-Xms8g
-Xmx8g
关键配置:
- 堆内存设置为物理内存的 50%
- 禁止 Swap:
bootstrap.memory_lock: true
第四步:查询优化
{
"index": {
"queries.cache.enabled": true,
"requests.cache.enable": true
}
}
开启查询缓存后,重复查询延迟从 200ms 降到 20ms。
优化效果
| 指标 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| P99 延迟 | 500ms | 80ms | 84% ↓ |
| QPS | 800 | 2000 | 150% ↑ |
| CPU 使用率 | 85% | 45% | 47% ↓ |
| GC 频率 | 每秒 5 次 | 每分钟 1 次 | 98% ↓ |
参考资源
讨论
你在生产环境中遇到过哪些性能问题?欢迎在评论区交流!
本文由 @search_engineer 原创发布,转载请注明出处。
[尊重社区原创,转载请保留或注明出处]
本文地址:http://searchkit.cn/article/15671
本文地址:http://searchkit.cn/article/15671
9 个评论
干货满满!Easysearch 的调优参数总结得很实用,收藏了!期待更多生产环境实战分享。
Easysearch的调优经验很实用!我们团队也在用,分片数量确实是个坑,默认5个分片对于小数据量来说太多了。
Rust实现的搜索引擎性能如何?有推荐的库吗?
ES和Easysearch的兼容性如何?
Easysearch会开源吗?
如何对搜索功能进行自动化测试?
新手如何快速上手Easysearch?
远程工作时如何维护ES集群?
@li_si 是的,默认5分片对于小于50GB的数据确实太多了。建议单分片控制在20-50GB,数据量小的话1-2个分片就够了。分片过多会增加查询开销。