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;
        }

在瀏覽器中的數據管理端可直接模擬操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM