跳转到主要内容

高并发性能优化设置

tomcat设置



server:
  tomcat:
    max-connections: 10000 # 最大连接数,默认值为8192,一般情况下可以不用修改
    threads:
      max: 1000 # 处理请求最大线程数,默认值是200,既tomcat的默认并发是200
      min-spare: 100 # 处理请求的最小空闲线程,即使没有请求需要处理,也保留,以便于快速响应连接请求
    accept-count: 100 # 额外的阻塞的处理请求数,当所有线程都在使用,还可以额外接受的请求,并放入请求队列,待有可用线程后立刻处理,一般不超过最大线程数的10%

  • max-connections: 10000:这个参数设置了Tomcat服务器允许的最大连接数。这意味着Tomcat在同一时间最多可以处理10000个客户端连接。这个值应该根据服务器的硬件资源(如CPU、内存)和网络带宽来调整,以确保服务器能够高效稳定地运行。

  • threads: 用于处理请求的线程池的参数。

    • max: 1000:线程池中的最大线程数。意味着Tomcat可以同时启动最多1000个线程来处理客户端请求。线程数数量需要考虑服务器的硬件资源。
    • min-spare: 100:线程池中保持空闲的最小线程数。即使当前没有那么多请求需要处理,Tomcat也会保持至少100个线程处于空闲状态,以便快速响应突然增加的请求量。

accept-count: 100:当所有可用的处理线程都在使用时,Tomcat能够接受的额外请求的数量,并将这些请求放入队列中等待处理。意味着如果所有的处理线程都在忙,Tomcat还可以接受额外的100个请求,但这些请求需要等待直到有线程变得可用。

连接数与线程数,根据TCP原理,是先建立连接,再处理请求,如果在连接超时后还没有处理请求,则断开连接,例如常见的timeout,socket closed

nginx设置

主要是开启gzip压缩,减少流量

    # 开启gzip压缩
    gzip on;
    # 压缩哪些文件类型
    gzip_types text/plain  text/css application/json text/javascript application/javascript;
    # 最小压缩大小,小于这个大小不压缩,单位是字节
    gzip_min_length 1000;
    # 压缩率,1-9,数字越大压缩的越好,但是也越消耗CPU
    gzip_comp_level 6;
    # 是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_vary on;
    # 禁止IE6使用gzip,因为这些浏览器不支持gzip压缩
    gzip_disable "MSIE [1-6]\.";
    # 在特定条件下对代理服务器的响应进行压缩
    gzip_proxied expired no-cache no-store private auth;
    # 缓冲区数量和大小,设置了16个8KB的缓冲区
    gzip_buffers 16 8k;
    # 最小http版本,低于这个版本不压缩
    gzip_http_version 1.1;

Springboot程序内优化

  • 按需返回,返回过多的数据占用内存和带宽
  • 嵌套的对象和数组,反序列化的时候嵌套对象占用开销
  • 独立的中间件主机:主机资源端口有限,如果全部在一台主机,会占用主机端口和文件描述

jmeter自身优化

  • 从jmeter.bat打开软件,而不是直接打开jar
  • 修改jmeter.bat增加应用程序堆栈
修改HEAP大小,一般为主机内存的一半

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    set HEAP=-Xms1g -Xmx8g -XX:MaxMetaspaceSize=512m
)

从bat启动时为英文修改