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中途还挂了一次,可能是单机资源限制,暂且研究到这里
相关推荐
EXI-小洲5 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
2601_961901707 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
何以解忧,唯有..7 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_21696290968 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
前端 贾公子9 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
2601_962203519 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理9 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
roman_日积跬步-终至千里10 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
落魄大学生之流水线上谋生计10 小时前
LangGraph 基本用法指南
java·windows·python·langchain
2601_9621284110 小时前
SpringBoot篇(缓存层)
java·spring boot·缓存