zoukankan      html  css  js  c++  java
  • 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;
            }

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

  • 相关阅读:
    centos安装docker-compose
    CentOS安装Docker
    【JPA】【笔记】GenerationType四中类型
    【maven】多个子项目、父项目之间的引用问题【转】
    一个页面多个echarts图表自适应
    jQuery操作单选按钮(radio)用法
    CASE WHEN .... THEN END 的用法
    遮罩层
    oracle 数据库的字段的增删改主键设定删除
    自动获取ROI-用于SFR算法的ROI获取
  • 原文地址:https://www.cnblogs.com/wangbg/p/elasticsearch.html
Copyright © 2011-2022 走看看