1 数据库最大连接数查看和配置
以mysql为例
检查数据库的最大连接池数量,确保有足够的连接数
假设部署5个应用,每个应用最大的连接数是400,那么数据库的最大连接数必须大于2000,每个应用最大的并发理论可以达到400
2 应用的最大连接池配置
2.1文件路径base /src/main/resources/config/application.yml
该参数会限制着数据库连接对象的个数,测试高并发时同样需要考虑合理设置该值
3 内置tomcat优化
主要有三个参数可以优化
3.1 maxThreads
每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务容器可以同时处理多少个请求。maxThreads默认200,肯定建议增加。但是,增加线程是有成本的,更多的线程,不仅仅会带来更多的线程上下文切换成本,而且意味着带来更多的内存消耗。如:JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。线程数的经验值为:1核2g内存为200,线程数经验值200;4核8g内存,线程数经验值800。
3.2 max C onnections
3.3 accept C ount
最大等待队列数
4 内置un dertow 优化,系统默认没有使用under tow
如果需要使用,优化参数如下,可以在base/src/main/resources/config/application.yml文件中新增配置
配置说明
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
# 不要设置过大,如果过大,启动项目会报错:打开文件数过多
#server.undertow.io-threads=32
# 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
# 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
#server.undertow.worker-threads=2000
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
server.undertow.buffer-size=1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
server.undertow.buffers-per-region=1024
# 是否分配的直接内存(NIO直接分配的堆外内存)
server.undertow.direct-buffers=true
5 启动流程,审批异步线程池配置
为了优化系统启动流程和审批接口的性能,系统增加了异步处理机制配置如下
5.1 core-pool-size
异步线程池初始化最小连接数
5.2 max -pool-size
异步线程池最大线程数, 如200并发,可以设置最大线程数据为200