ES elasticsearch 客户端查询CPU占用率高之性能优化
问题描述:由于业务原因,网站并发一般发生在晚上1点左右,持续半个小时,某晚移动端商品图片加载不出来,公司大佬紧急联系各个负责人,高峰期过后恢复正常,第二天查找原因,从商品查找到了ES这边。接手项目前听说由于CPU100%挂过一次,测试压力测试查询并发在每秒80左右就不行了,于是增加机器负载,连续几天还是接二连三的报警,于是仔细查看了代码。性能测试结果如下:
解决方案:发现主站搜索用的是API方式Post提交搜索,出问题的几个接口是使用客户端搜索,换成了API方式后性能提升可以看的到,大概是客户端查询的5倍,看来官方的Client也不是很靠谱。。。
主要代码如下:
//API查询方法 public static GoodsSearchReturnModel GetList(object query) { var model = new GoodsSearchReturnModel(); var url = ConfigHelper.GeElasticSearchUrl() + "goods_index/_search"; try { var r = HttpClientHelper.PostAsJsonAsync(url, query); var result = JsonConvert.DeserializeObject<ResultModel<GoodsIndexModel>>(r); if (result != null) { if (result.hits.hits != null && result.hits.hits.Any()) { result.hits.hits.ToList().ForEach(a => { model.GoodsList.Add(a._source); }); model.Total = result.hits.total; } } } catch (Exception ex) { LoggerHelper.GetLogger("SearchApiLog").Info(string.Format("{0}服务调用失败{1},错误原因{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), url, ex)); } return model; }
在浏览器中的数据管理端可直接模拟操作
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战