通过性能压测的结果来进行优化

这是我们之前的得到的压测表
在这里插入图片描述

1.优化首页一级菜单渲染,默认我们的生产环境themleaf的缓存时开启的,由于我们要进行优化,我们将其开启测试下。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1d71977a376a41818c97c3785

相比于之前没看没开缓存,吞吐量420->465,90%请求响应时间338->323,99%请求响应时间604->535,性能还是有提升的。

2.继续优化首页一级菜单渲染,我们刚刚只优化了themleaf,我们可以关日志,还有数据库可以优化,

QueryWrapper<CategoryEntity> parent_cid = new QueryWrapper<CategoryEntity>().eq("parent_cid", 0);

这是我们查询一级菜单的代码,用的parent_cid进行匹配的,所以我们可以建立parent_cid索引。
在进行测试下

在这里插入图片描述

相比于之前的开缓存,吞吐量465->1221,90%请求响应时间323->118,99%响应时间535->201,性能还是有很大提升的。
3.优化三级分类数据获取,建立索引后在测试一下。
在这里插入图片描述

相比于之前没有建立索引,吞吐量从5.7->14.7,90%响应时间17285->6588,99%响应时间17372->6806.还是有一倍多的提升的。

伊甸园区和老年代总是满,不停的在进行Y gc和full gc,所以我们要适当的调大我们的堆空间。
在这里插入图片描述
这是我们最终的压测数据!
在这里插入图片描述

4.首页全量数据获取,优化(nginx动静分离)

聚合在这里插入图片描述

这里吞吐量不大反而小了,是因为我们之前测试全量数据获取的时候是直接访问的localhost,没有过nginx和网关,
所以这里加上加上nginx和网关后,性能是有所下降的。

但是堆不断的进行垃圾回收,老年代要满的时候,大GC基本上1s一次,小gc1秒3次左右而且每次老年代gc的时候还gc不掉多大空间,到最后就出现了oom异常,除了内存崩溃宕机的情况了。所以我们调整堆。

-Xmx1024m -Xms1024m -Xmn512m
在这里插入图片描述
吞吐量基本上不变,但是不会出现内存崩溃的情况了。
在这里插入图片描述
并且响应时间也随之提高了,因为堆大了,gc次数少了,stw时间少了,响应时间也就变短了。

5.优化三级分类获取

我们以前获取三级分类的时候是循环查表,查出所有的一级分类,然后再去查每一个一级分类的二级分类,然后再去查每一个二级分类的三级分类。
所以我们这次优化业务逻辑代码,先查出所有的分类,然后根据parent_id去匹配。

/**
     * all 所有分类
     * parent_id 父id
     * @param allCategory
     * @param parent_id
     * @return
     */
    public List<CategoryEntity> getCatalogEntityByParentId(List<CategoryEntity> allCategory,Long parent_id){
        List<CategoryEntity> collect = allCategory.stream().filter(item -> {
            return item.getParentCid() == parent_id;
        }).collect(Collectors.toList());
        return collect;
    }
      
   //这个函数的意思就是在所有的分类中筛选中parent_id等于传过来的参数的   这样就避免了循环查表。           

压测一下!
在这里插入图片描述
在这里插入图片描述
加索引后吞吐量从5.7->14.7,没有太大的提升,但是我们优化了业务逻辑后,直接干到了164,90%响应时间695,99%响应时间872.
所以在开发中一定要避免循环查表!!!

最后的压测单
在这里插入图片描述
肉眼可见,在三级分类数据获取业务中,避免了循环查表,无论是吞吐量还是业务逻辑都有很大的提升!!

所以!
所以在开发中一定要避免循环查表!!!

6.使用redis进行优化

@Override
    public Map<String, List<Catelog2Vo>> getCatalogJson() {
        //先去缓存中查
        String catalogJSON = cache.opsForValue().get("catalogJSON");
        //没有的话从缓存中查 并且放入到缓存中
        if(StringUtils.isEmpty(catalogJSON)){
            Map<String, List<Catelog2Vo>> catalogJsonFromDB = getCatalogJsonFromDB();
            String jsonString = JSON.toJSONString(catalogJsonFromDB);
            //放入到缓存汇总
            cache.opsForValue().set("catalogJSON",jsonString);
            return catalogJsonFromDB;
        }
        //有的话查出来反序列化然后返回
        Map<String, List<Catelog2Vo>> result = JSON.
                parseObject(catalogJSON, new TypeReference<Map<String, List<Catelog2Vo>>>() {
        });

        return result;
    }

压测数据
在这里插入图片描述
吞吐量直接从164->843,90%响应时间695->139,99%响应时间872->167,性能整整提升了5倍多

但是,如果你的lettuce版本是5.1.8以及一下的话,会报堆外异常。
具体看这个链接https://blog.csdn.net/prefect_start/article/details/115093854


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值