课件

04、性能与压力测试.pdf

性能优化 - Nginx 动静分离

image.png

  • 首先,把商品服务中静态文件夹 index 放到 nginx 下 /mydata/nginx/html/static目录;
  • 给模板中所有静态资源的请求路径前都加上 /static;
  • 修改 Nginx 配置文件 /mydata/nginx/conf/conf.d/gulimall.conf

    1. # /static/ 下所有的请求都转给 nginx
    2. location /static/ {
    3. root /user/share/nginx/html;
    4. }

    性能优化 - 优化查询三级分类数据

    ```java @Override public Map> getCatalogJson() { System.out.println(“查询了数据库”); // 性能优化:将数据库的多次查询变为一次 List selectList = this.baseMapper.selectList(null);

    //1、查出所有分类 //1、1)查出所有一级分类 List level1Categories = getParentCid(selectList, 0L);

    //封装数据 Map> parentCid = level1Categories.stream().collect(Collectors.toMap(k -> k.getCatId().toString(), v -> {

    1. //1、每一个的一级分类,查到这个一级分类的二级分类
    2. List<CategoryEntity> categoryEntities = getParentCid(selectList, v.getCatId());
    3. //2、封装上面的结果
    4. List<Catalogs2Vo> catalogs2Vos = null;
    5. if (categoryEntities != null) {
    6. catalogs2Vos = categoryEntities.stream().map(l2 -> {
    7. Catalogs2Vo catalogs2Vo = new Catalogs2Vo(v.getCatId().toString(), null, l2.getCatId().toString(), l2.getName().toString());
    8. //1、找当前二级分类的三级分类封装成vo
    9. List<CategoryEntity> level3Catelog = getParentCid(selectList, l2.getCatId());
    10. if (level3Catelog != null) {
    11. List<Catalogs2Vo.Category3Vo> category3Vos = level3Catelog.stream().map(l3 -> {
    12. //2、封装成指定格式
    13. Catalogs2Vo.Category3Vo category3Vo = new Catalogs2Vo.Category3Vo(l2.getCatId().toString(), l3.getCatId().toString(), l3.getName());
    14. return category3Vo;
    15. }).collect(Collectors.toList());
    16. catalogs2Vo.setCatalog3List(category3Vos);
    17. }
    18. return catalogs2Vo;
    19. }).collect(Collectors.toList());
    20. }
    21. return catalogs2Vos;

    })); return parentCid; }

private List getParentCid(List selectList, Long parentCid) { return selectList.stream().filter(item -> item.getParentCid().equals(parentCid)).collect(Collectors.toList()); } ```

性能优化 - 调整内存

对于系统的性能优化方面,我们还可以调整 Java 程序运行的堆内存空间来减少 Full GC 和 Minor GC 从而减少运行时间。
Full gc 最会影响性能,根据代码问题,避免 full gc 频率。可以适当调大年轻代容量,让大对象可以在年轻代触发 young gc,调整大对象在年轻代的回收频次,尽可能保证大对象在年轻代回收,减小老年代缩短回收时间;