基于JMeter模拟高并发
目录1、高并发带来的问题2、模拟高并发的场景2.1、编写两个接口2.2、修改tomcat线程数2.3、使用JMeter对接口进行压力测试2.3.1、下载JMeter2.3.2、修改配置,并启动软件2.3.3、添加线程组2.3.4、添加Http取样2.3.5、启动压测,浏览器访问message接口观察效果2.4、结论1、高并发带来的问题在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以
·
目录
1、高并发带来的问题
在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证100%可用。如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。
2、模拟高并发的场景
2.1、编写两个接口
package cn.jack.controller;
import cn.jack.domain.Order;
import cn.jack.domain.Product;
import cn.jack.service.OrderService;
import cn.jack.service.ProductService;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@Slf4j
public class OrderController2 {
@Autowired
private OrderService orderService;
@Autowired
private ProductService productService;
/**
* 下单 -- 基于Feign实现服务调用
* @param pid 商品id
* @return
*/
@RequestMapping("/order/prod/{pid}")
public Order order(@PathVariable("pid") Long pid) {
log.info("收到下单请求,准备查询商品信息。pid={}", pid);
// 通过Feign调用商品微服务,查询商品信息
Product product = this.productService.findByPid(pid);
log.info("商品信息查询成功。内容为:{}", JSON.toJSONString(product));
// 模拟请求延迟2s
try {
Thread.sleep(20001);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 生成商品信息保存
Order order = new Order();
order.setNumber(1);
order.setPid(pid);
order.setPname(product.getPname());
order.setPprice(product.getPprice());
order.setUid(1);
order.setUsername("陈家宝");
// 暂时注释,避免产生大量垃圾数据
// this.orderService.createOrder(order);
log.info("订单信息保存成功。内容为:{}", JSON.toJSONString(order));
return order;
}
@RequestMapping("/order/message")
public String message() {
return "模拟高并发";
}
}
2.2、修改tomcat线程数
修改服务消费者(这里为订单微服务)的application.yml文件,将tomcat的最大线程数修改为10,方便测试。
server:
port: 8091
tomcat:
max-threads: 10
2.3、使用JMeter对接口进行压力测试
2.3.1、下载JMeter
下载地址https://jmeter.apache.org/
2.3.2、修改配置,并启动软件
进入bin目录,修改jmeter.properties文件中的语言支持为language=zh_CN,然后双击jmeter.bat启动。
2.3.3、添加线程组
2.3.4、添加Http取样
2.3.5、启动压测,浏览器访问message接口观察效果
2.4、结论
测试发现,message接口访问变得响应缓慢。意味着由于order方法囤积了大量请求,导致message方法的访问也出现了问题,这就是服务雪崩的雏形。
更多推荐
已为社区贡献6条内容
所有评论(0)