高并发性能优化设置
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
)