说明
当一个方法 性能差,tomcat工作线程全部被占用,将会 拖慢 整个服务的性能
如下图:
做法
修改
getNoticeById()方法,让其 休眠3秒,再返回结果通过 jmeter 模拟大并发量 访问
getNoticeById()方法访问 其他方法,会发现 其他方法 也变慢了
创建 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
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工作线程全部被占用,导致 所有接口 处理慢,甚至超时,甚至让服务崩溃













