Java安装并使用Jmter测试微服务高并发下的服务雪崩场景

高并发会给微服务带来什么样的的问题?

在微服务架构中,我们将业务拆分成一个个的服务,服务和服务之间可以互相调用,但是由于网络原因或者自身的原因,服务并不能保证服务100%是可用的,如果单个服务出现问题,调用这个服务的时候就会出现网络延迟在系统中一直阻塞等待(阻塞就意味着线程不能释放,大量的线程都会占用在这里),此时如果有大量的网络请求(高并发)涌入,会形成任务堆积,最终导致服务瘫痪

tomcat支持的线程是200-400,如果大于这个访问量就会无法访问

如果系统因为某个方法阻塞太久会直接影响到这个系统的其他方法,这个下面我们就去演示

以代码的形式模拟上述场景

进行以下修改

1 由于OrderController中代码已经很多了,这里新建一个测试的OrderController2用来模拟高并发带来微服务出问题带来的阻塞问题

2 为了保证只有一个OrderController能够运行,我们把正常的OrderController的@RestController注掉

3 模拟调用商品微服务需要两秒阻塞

4 为了不产生大量垃圾数据,把保存信息注掉

5 由于tomcat支持的线程数是200-400,我们为了方便测试修改配置文件让tomcat最大线程数改成10,默认是200

 #端口server:

server :

  port : 8091

 #显示tomcat最大线程数为10 默认200

  tomcat :

  max-threads : 10

6 新增测试方法 用来演示:如果系统因为某个方法阻塞太久(下单方法)会直接影响到这个系统的其他方法(测试方法)

 //测试高并发

@RequestMapping( "order/test" )

public String test(){

    return "测试高并发" ;

}

修改完之后重启Order服务进行测试,正常访问测试方法是没有任何问题的而且访问速度很快

接下来就要测试高并发下会给我们的测试方法带来什么样的影响

测试之前,我们需要借助一个工具进行测试jmeter

下面就安装jmeter以及进行高并发测试

什么是Jmeter?

Jmeter是Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。它的功能十分强大,今天我们只做测试高并发请求

下载Jmeter

下载网址:https://jmeter.apache.org/download_jmeter.cgi

下载到本地进行解压缩目录如下

我们只需要关心两个地方 启动文件和配置文件

Jmeter进行汉化

打开配置文件修改国际语言

language=zh_CN

保存重启服务(双击bat文件)

汉化前

汉化后

汉化成功

使用Jmeter进行高并发测试

1 添加线程组

2 配置线程并发数

3 添加HTTP取样

右键刚才配置好的线程组新增HTTP取样器

4 配置取样 根据项目配置和接口路径填写即可

5 为了方便查看并发发送结果,添加一个监听器 察看结果树

右键HTTP请求

6 启动jmeter高并发发送请求测试接口

点击启动按钮并且点击yes并且保存启动jmeter高并发发送请求

点击save保存

发现jemter已经启动成功并且已经发送了大量请求,绿色表示发送成功

这时候再访问我们的测试方法.看看他是不是会受到订单方法阻塞而受到影响 http://localhost:8091/order/test

很明显已经被影响了,虽然可以正常访问,但是没有那么快了,至此我们的代码测试和jmeter测试完成!

总结

通过测试发现,由于order方法囤积了大量阻塞线程请求,导致test方法出现了问题,这就是服务雪崩的雏形

猜你喜欢

转载自blog.csdn.net/weixin_46713508/article/details/131415799
今日推荐