news 2026/4/16 10:20:39

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
性能测试调优之线程池的性能优化实战

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

连接池的概念

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

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

在tomcat的项目里:改 server.xml文件中可以修改连接池的配置参数

现在很多项目 springboot开发这个框架,内置了tomcat, 也有连接池的配置参数,只是这个参数开发写在代码中打在jar包中。如果需要调整只能找开发人员去修改他的代码。

线程池的工作过程

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

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

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

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

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

当空闲线程数量超过核心线程数时,线程池会尝试销毁一些空闲线程来节省资源。

如果当前没有空闲的线,线程池会根据配置来决定如何处理这个任务:

如果线程数未达到最大线程数,线程池会尝试创建新的线程来执行任务。

如果线程数已达到最大线程数,并且任务队列已满,线程池会根据配置的拒绝策略来处理这个任务(如抛出异常、忽略任务、使用调用者线程执行任务等)。

线程池的优点

降低资源消耗:通过重用已存在的线程,减少了线程创建和销毁的开销。

提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行。

提高线程的可管理性:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。

调整线程池大小

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

线程连接池connector:

connectionTimeout 连接超时时间,单位毫秒

maxThreads 最大并发连接数:如果是微服务,maxThreads这个值一般都很小,常见的就是几个或者小几十

acceptCount 最大可接受的排队数量,当队列中的连接数达到这个数字后队列慢,进来的请求一律被拒绝,默认是100;

minSpareThreads: tomcat初始化默认时默认创建的线程数,也是以后线程增加时一次增加的最小数量

maxSpareThreads: 这个参数标识,一旦创建的线程数量超过这个值,Tomcat 就会关闭不活动的线程

线程池最大可以保持的连接数量:maxThreads * acceptCount

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

但是线程池配置大了tomcat的内存使用也就要越多,打开的文件数据,创建的线程数量等,也都受操作系统的限制。

所以这个线程池的配置不可能真的配置无限大。

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

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

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

在Java中,线程池提供了四种预定义的拒绝策略:

AbortPolicy:丟弃任务并抛出RejectedExecutionException异常 【默认的策略】

DiscardPolicy:丢弃任务,但是不抛出异常;

DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务

CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务

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

线程池问题的性能调优

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

1、要求的并发用户数达不到

2、响应时间特别长

3、直接报错丢弃任务。

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

解决办法:

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

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

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:18:35

【开题答辩全过程】以 基于springboot的流浪动物帮护系统为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/4/15 23:47:36

【开题答辩全过程】以 高校社团管理平台为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/4/16 9:06:48

【课程设计/毕业设计】基于springboot的元宇宙平台的整车生产线管理系统空间管理、各类模型管理、各类素材管理等功能【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/16 9:08:46

计算机Java毕设实战-基于springboot的云平台的工厂整车生产线管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/16 9:06:35

《把脉行业与技术趋势》-81-《全球科技通史》- 既然能量是守恒的,既然世界的本质是熵增,而是人类生产创造活动是熵减,是需要消耗额外的能量,那么这个熵减活动的能量是哪里来的?

这是一个极富深度、横跨物理学(热力学)、生态学、经济学与哲学的本源性问题。我们来一层层清晰拆解,避免常见误解,给出既科学严谨又具现实解释力的回答: ✅ 核心结论(先说答案): 人类…

作者头像 李华
网站建设 2026/4/16 9:07:33

【课程设计/毕业设计】基于springbootJava的智慧话果园数字化管理领航系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华