1.启动cloud-provider-hystrix-payment8001
1.1.正常测试
启动Eureka注册中心:cloud-eureka-server7001,cloud-eureka-server7002
启动服务提供者:cloud-provider-hystrix-payment8001
浏览器输入:http://localhost:8001/payment/hystrix/ok/31
返回如下内容:
线程池:http-nio-8001-exec-9 paymentInfo_OK,id: 31 哈哈哈
浏览器输入:http://localhost:8001/payment/hystrix/timeout/31
返回如下内容,次接口会耗时3秒钟
线程池:http-nio-8001-exec-3 paymentInfo_TimeOut,id: 31 呜呜呜 耗时(秒)3
1.2.JMeter高并发测试
JMeter压测测试
开启Jmeter,来20000个并发压死8001,20000个请求都去访问paymentInfo_TimeOut服务
浏览器输入:http://localhost:8001/payment/hystrix/ok/31
浏览器输入:http://localhost:8001/payment/hystrix/timeout/31
发现两个接口没有立刻返回数据而是等待几秒才返回,没有进行Jmeter压测的时候http://localhost:8001/payment/hystrix/ok/31接口会立刻返回数据,为什么会出现这种情况呢?
因为Tomcat的默认的工作线程数被打满了,没有多余的线程来分解压力和处理。
Jmeter压测结论:
上面还是服务提供者8001自己测试,假如此时外部的消费者80也来访问,那消费者只能干等,最终导致消费端80不满意,服务端8001直接被拖死
2.启动cloud-consumer-feign-hystrix-order80
6.1.正常测试
浏览器输入:http://localhost/consumer/payment/hystrix/ok/31
会很快返回结果:
线程池:http-nio-8001-exec-3 paymentInfo_OK,id: 31 哈哈哈
6.2.高并发测试
启动JMeter进行压测,具体参考【JMeter高并发测试】
浏览器输入:http://localhost/consumer/payment/hystrix/ok/31
发现会等待几秒钟才会返回结果,浏览器一直转圈圈
要么消费端报超时错误
3.故障现象和导致原因
8001同一层次的其他接口服务被困死,因为tomcat线程里面的工作线程已经被挤占完毕
80此时调用8001,客户端访问响应缓慢,转圈圈
结论:
正因为有上述故障或不佳表现,才有我们的降级/容错/限流等技术诞生