栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

这是我们之前的得到的压测表

1.优化首页一级菜单渲染,默认我们的生产环境themleaf的缓存时开启的,由于我们要进行优化,我们将其开启测试下。

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

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

QueryWrapper parent_cid = new QueryWrapper().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去匹配。

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

        return result;
    }

压测数据

吞吐量直接从164->843,90%响应时间695->139,99%响应时间872->167,性能整整提升了5倍多。

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号