ES elasticsearch 客户端查询CPU占用率高之性能优化

本文描述了一个实际案例,针对网站在高并发时段出现的商品图片加载失败问题进行排查与解决。通过对比客户端搜索与API方式的性能差异,最终选择采用API方式显著提升了系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:由于业务原因,网站并发一般发生在晚上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;
        }

在浏览器中的数据管理端可直接模拟操作

转载于:https://www.cnblogs.com/wangbg/p/elasticsearch.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值