jmeter压力测试与springboot-tomcat调优


使用背景:多文件上传批量处理,提高用户的体验,在上传大量文件采用异步处理,那么需要提高上传接口的并发量,我压力测试该接口,出现连接被拒接的情况

jmeter压力测试

postman测试感觉比这个好:https://www.cnblogs.com/stm32stm32/p/10434399.html
有一点,postman压力测试文件上传时,后台只能采用request,获取流的方法获取

 /**
     * postmain测试上传文件压力测试
     *
     * @param request
     * @param response
     * @return
     * @throws IOException
     */
    @RequestMapping("/uploadImg")
    @ResponseBody
    public Object uploadImg(HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.out.println("图片上传开始...");
        String destDir = "/upload/image";

    /* response.setHeader("Access-Control-Allow-Origin", "*");
     response.setHeader("Access-Control-Allow-Methods", "POST");*/

        ServletInputStream inputStream = request.getInputStream();

        //获取文件上传的真实路径
        String uploadPath = request.getSession().getServletContext().getRealPath("/");
        //保存文件的路径
        String filepath = destDir + File.separator + createNewDir();
        File destfile = new File(uploadPath + filepath);
        if (!destfile.exists()) {
            destfile.mkdirs();
        }
        //文件新名称
        String fileNameNew = getFileNameNew() + ".png";
        File f = new File(destfile.getAbsoluteFile() + File.separator + fileNameNew);
        if (!f.exists()) {
            OutputStream os = new FileOutputStream(f);
            BufferedOutputStream bos = new BufferedOutputStream(os);

            byte[] buf = new byte[1024];
            int length;
            length = inputStream.read(buf, 0, buf.length);

            while (length != -1) {
                bos.write(buf, 0, length);
                length = inputStream.read(buf);
            }
            bos.close();
            os.close();
            inputStream.close();
            String lastpath = filepath + File.separator + fileNameNew;
            System.out.println("返回图片路径:" + lastpath);
            return lastpath;
        }
        return false;
    }

压力测试工具:网上现在一个jmeter工具,用法比较简单,我搞了个jmeter5.3的,还是英文版本的,吊单词都不认识几个,用起来都想抽自己,不过当学习下英文吧,勉强能用,这个下载后好,解压免安装的,但是需要配置环境变量,自行百度,没啥的,怎么使用是个问题,我自己测试老是不行,这里给出图形和文字说明

window版本的,点击:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个含义在这里插入图片描述

在这里插入图片描述
添加监听,我采用下面两个
在这里插入图片描述
另外一个是
在这里插入图片描述
这个可以将输出结果存放在这个文件中(我在springcloud网关中做的限流然后使用压力测试)
在这里插入图片描述

设置请求头,我这边有个token校验
在这里插入图片描述
看我的这个参数设置,我是文件上传的,你上传文件可以f12看那个请求头的报文信息,然后复制过来,
看f12的
在这里插入图片描述
我配置的请求头看:
在这里插入图片描述
这样就可以了,然后配置请求信息
在这里插入图片描述
看文件上传的那个参数设置
在这里插入图片描述
这样就行了,你在
在这里插入图片描述

压力测试具体含义信息(英文看不懂,这个给出了中文解释):https://www.jianshu.com/p/f6014b481d5e
,你添加这个
在这里插入图片描述

这个工具压力测试会出现下面几个坑,我就中招了一个连接中断,看这个链接:https://www.cnblogs.com/shenh/p/10240714.html
一些常见的jmeter的错误和解决方法:https://www.cnblogs.com/jane4321/p/11013042.html
,我配置如下图
在这里插入图片描述

springboot-tomcat调优

可以看下这篇文章:https://www.cnblogs.com/gaoqiaoliangjie/p/11047910.html,我是参考他的

目标:

对tomcat线程扩容
对应的线程池做变更
keepAlive做优化

首先看boot内嵌的tomcat信息
在这里插入图片描述

经验来说4核8g的虚拟机最合适的最大线程数为800,最小的100是为了解决突发问题,当有请求突发访问的时候可以解决。

我本地内嵌tomcat修改为yml信息为
在这里插入图片描述

服务端优化配置内嵌tomcat

package com.jydw.sample.config.pubic;

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;

/**
 * @version 0.0.1
 * @program: sample
 * @description: 定制化内嵌tomcat配置  优化tomcat,提高并发处理
 * @author: huangzq
 * @create: 2020-10-30 10:45
 */
//当spring容器内没有TomcatEmbededServletContainerFactory这个bean时,会把此bean加载进来
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {

    @Override
    public void customize(ConfigurableWebServerFactory factory) {
        //使用对应工厂类提供给我们的接口定制化我们的tomcat connector
        ( (TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                Http11NioProtocol protocol= (Http11NioProtocol) connector.getProtocolHandler();
                //定制化keepAliveTimeOut
                //30s,30s没有请求服务,自动断开
                protocol.setSelectorTimeout(30000);
                //当请求超过10000条就自动断开keepAlive链接
                protocol.setMaxKeepAliveRequests(10000);

            }
        });
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值