性能测试调优之线程池的性能优化实战

前言

做性能测试时,有些压测场景下TPS上不去,或者响应时间变长,或者直接出现一些连接被拒绝的报错,这些都有可能是tomcat的连接池不够引起的。所以,今天我们跟大家聊一下tomcat的连接池。

连接池的概念

线程池:是一个管理线程集合的框架,它负责维护一个线程集合,这些线程可以在需要时被重用,从而减少了线程创建和销毁的开销,用于优化资源管理和提高程序性能;

线程池在CentOS系统中大小通常不是直接在操作系统级别进行配置的,而是依赖于运行的应用程序或中间件(如Tomcat、Java应用程序等)的配置。

线程池的工作过程

1、在程序开始时,线程池会根据配置(如核心线程数、最大线程数、队列容量等)初始化一定数量的线程【这个不是最大的线程数】,并等待任务到来。

2、当有新的任务提交给线程池时,线程池会接收这个任务。

3、线程池会按照一定的策略(如FIFO、优先级等)将任务分配给空闲的线程去执行。

4、分配到任务的线程会开始执行这个任务,直到任务完成;执行完毕后,线程不会立即销毁,而是回到线程池中等待下一个任务。

5、线程池会根据配置和当前的工作负载来动态地调整线程的数量:

线程池的优点

调整线程池大小

1、tomcat:如果你在使用Tomcat作为Web服务器,可以在Tomcat的配置文件conf/server.xml中配置元素来定义线程池。然后,在元素中引用这个线程池。

图片.png

线程连接池connector:

conf下server.xml 可以配置线程池的大小。建立http的连接通道就会发生变化,线程池配置的越大,可能能支持的并发数就可能更多。

在性能测试时,如果线程池不足引发的性能问题

1、任务执行时间变长:由于线程池中的线程数量有限,当有大量任务需要执行时,任务需要等待其他任务完成才能获取到线程资源,这会导致整体的任务执行时间变长。【RT变大】

2、任务被拒绝:当线程池中的线程都处于忙碌状态,且队列已满时,新提交的任务可能会被拒绝执行。这可能会导致程序出现错误或异常。【报错:RejectedExecutionException】

3、系统资源利用率低:在某些情况下,尽管线程池不足,但系统可能仍有空闲资源(如CPU、内存等)。这可能是因为线程池的配置不合理,导致资源没有得到充分利用。

线程池问题的性能调优

如果性能测试中,出现以下现象:

可能原因: 应用支持的连接池不够。

解决办法:

1、修改tomcat的连接池的配置参数 maxThreads值, 适当的扩大。

但是要注意:线程池不是可以无限扩大的,设置越大消耗的内存和系统本身的资源越多;所以要适当并合理的设置。

回帖
请输入回帖内容 ...