Hystrix创建notice_hystrix子模块,压测感受高并发卡顿(jmeter)

说明

当一个方法 性能差,tomcat工作线程全部被占用,将会 拖慢 整个服务的性能

如下图:

做法

  1. 修改 getNoticeById() 方法,让其 休眠3秒,再返回结果

  2. 通过 jmeter 模拟大并发量 访问 getNoticeById() 方法

  3. 访问 其他方法,会发现 其他方法 也变慢了

创建 notice_hystrix 工程

根据之前的 notice 工程,再创建 notice_hystrix 工程

不要动 notice 工程,万一搞坏了,没有备用方案

创建 notice_hystrix 子模块

略

修改 pom.xml

将 notice 工程的 pom.xml 中的依赖,复制粘贴到 notice_hystrix 子模块中

复制 代码、配置文件

复制 notice java代码、配置文件 到 notice_hystrix中

修改 NoticeMain 启动类

修改 该类为:NoticeHystrixMain

修改 NoticeCtrl

修改 getNoticeById()

该方法最后休眠 3 秒(表示复杂运算、查询数据库等 耗时操作),如下:

@GetMapping(value="/getNoticeById/{id}")
public CommonResult<Notice> getNoticeById(@PathVariable("id") String id){
    Notice notice=noticeService.getNoticeById(id);
    System.out.println("=====id:"+id+"--"+new Date());

    try {
        Thread.sleep(3000);//休眠3秒,表示复杂运算、查询数据库等 耗时操作
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    return new CommonResult(200,"成功!",notice);
}

增加 test()

此方法只是用于测试、演示效果,无任何意义

@GetMapping("/test")
public CommonResult test(){
    CommonResult res=new CommonResult(200,"成功!");
    return res;
}

http://localhost:8080/getNoticeById/195c6547e5044c759dc39caf317998c5

启动服务

启动 NoticeHystrixMain 服务

访问测试

http://localhost:8080/getNoticeById/195c6547e5044c759dc39caf317998c5

http://localhost:8080/test

jmeter 压力测试

压力测试 getNoticeById() 接口

添加线程组

按下图设置:500 x 200 = 10万 个线程 访问getNoticeById() 接口,tomcat工作线程全部被占用,导致处理慢,甚至超时

添加 http 请求

如下图设置url:

http://localhost:8080/getNoticeById/195c6547e5044c759dc39caf317998c5

添加察看结果树

可以查看每个请求的执行结果

添加汇总报告

查看汇总结果

添加聚合报告

查看聚合结果

添加汇总图

以图表的形式展示

启动测试

点击下图绿色启动按钮,开始测试

浏览器访问 test() 接口

打开浏览器访问 http://localhost:8080/test 链接,发现 test() 接口反应速度也慢了

停掉 压力测试

停掉 压力测试后,再 访问 test() 接口,该接口速度 恢复原来速度

test() 接口 慢的 原因

由于 jmeter 大量并发访问 getNoticeById() 接口,tomcat工作线程全部被占用,没有 多余的线程处理 test()接口

查看 察看结果树

可以查看每个请求的信息,成功显示绿色,失败显示红色

查看 汇总报告

可以查看汇总信息,如:异常(失败的比例)

查看 聚合报告

可以查看聚合报告,如:异常(失败的比例)

查看汇总图

勾选要显示的数据,如下图:

点击 【显示图表】 显示图表

得出结论

当 大并发量 访问 某个接口时,tomcat工作线程全部被占用,导致 所有接口 处理慢,甚至超时,甚至让服务崩溃


原文出处:/show_1IX1QEGQX6n4.html