Jmeter压测遇到的问题

1.什么是Jmeter

  • Jmeter是一种压测工具,压测就是压力测试,模拟并发量来对系统进行模拟冲击,比如高并发,可以看报告中的QPS,吞吐量,进行性能分析,从而进行优化

2.使用步骤

1.进入下载jmeter的文件,进入bin,打开cmd,输入jmeter,打开jmeter

2.创建线程组

3.在线程组下创建http请求

4.在该http请求下添加监听器,查看结果树聚合报告比较常用

5.如果需要传入参数,需要模拟大量用户的请求数据体,可以在添加csv,这个文件作为读取的用户数据

  • 添加好后进入配置,文件名就是文件的位置,而这个csv文件可以由java程序生成

6.生成数据文件demo

java 复制代码
public class Main {
    public static void main(String[] args) throws IOException {
        // 1.准备书写器
        FileWriter writer = new FileWriter("users.csv");
        // 2.写入
        for(int i = 1; i <= 3000; i++) {
            writer.write("{\"userId\":" + i + ",\"voucherId\":1}\n");
        }
        // 3.关闭书写器
        writer.close();
    }
}

7.线程组配置线程

  • rame-up的含义是2500个线程在1秒内打完
  • 循环次数就是线程请求重复的次数

8.配置http信息头管理器

  • application/json表示请求发给接口的是json数据

3.错误捕捉不细致

  • 到底是kafka消息发送失败了,还是序列化失败了,异常捕捉要细致一点,不然真的不好排查问题,增加补偿机制.
java 复制代码
  try {
            String json = objectMapper.writeValueAsString(eventMessage);
            log.info("json序列化成功, json = {}", json);
            kafkaTemplate.send(KafkaConstants.SECKILL_TOPIC, String.valueOf(userId), json);
            log.info("kafka发送成功, orderId = {}", orderId);
        } catch (com.fasterxml.jackson.core.JsonProcessingException e) {
            log.info("json序列化失败, orderId = {}", orderId);
            compensateRedis(voucherId, userId);
        } catch (Exception e) {
            log.info("kafka消息发送失败, orderId = {}", orderId);
            compensateRedis(voucherId, userId);
            throw new BusinessException(10003, "json序列化失败");
        }

4.发送失败补偿机制

  • 由于是单机,简单的redis回滚补偿
java 复制代码
 private void compensateRedis(Long voucherId, Long userId) {
        String stockKey = "seckill:stock:" + voucherId;
        String userSetKey = "seckill:order:users:" + voucherId;
        stringRedisTemplate.execute(
                compensateScript,
                Arrays.asList(stockKey, userSetKey),
                String.valueOf(userId)
        );
    }

5.consumer转换对象字段为空

  • 在consumer接收到对象过后,需要把它转换成po插入数据库,这个时候po有些字段映射后是空的,由于unique限制,所以插入失败,这个问题非常常见,注意看你插入的对象的字段和数据表的要求

6.老毛病,字段传错,值没赋对,报错和报空

7.tomcat性能优化

  • 经过多次极限压测后,并发量在2500左右,在2650时出现连接被拒绝的错误,性能瓶颈锁定在tomcat

accept-count

  • 1.功能:控制请求进不进得来
  • 2.流程:请求 -> accept队列 -> 工作线程 -> 业务代码

thread-max

  • 功能:控制同时能处理多少请求

thread-min-space

  • 功能:空余线程数量
  • 但是我修改了tomcat的配置,但是再次打2500的时候,发现只成功了一半,这到底是怎么一回事,我估计是CPU的问题,由于我是单机,同时启动docker、mysql等服务,kafka中途还挂了一次,可能是单机资源限制,暂且研究到这里
相关推荐
云烟成雨TD2 小时前
Spring AI 1.x 系列【14】三月双版本连发!Spring AI 最新功能全掌握
java·人工智能·spring
XiYang-DING2 小时前
【Java SE】var关键字
java·开发语言
咸鱼2.03 小时前
【java入门到放弃】Session和JWT
java·开发语言
J2虾虾3 小时前
使用GeoTools把Geojson转换成Shp文件
java·开发语言·geotools
愤豆3 小时前
11-Java语言核心-JVM原理-JVM调优详解
java·jvm·测试工具
SEO-狼术3 小时前
PDFs Programmatically in WPF
java·.net
逝水如流年轻往返染尘3 小时前
JAVA中的内部类
java·开发语言
深蓝轨迹3 小时前
黑马点评--达人探店模块
java·spring boot·redis
!停3 小时前
C++入门基础—类和对象3
java·数据库·c++