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

embedded/2024/11/28 12:17:13/

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

连接池的概念

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

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

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

线程池的工作过程

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

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

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

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

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

  • 当空闲线程数量超过核心线程数时,线程池会尝试销毁一些空闲线程来节省资源。
  • 如果当前没有空闲的线,线程池会根据配置来决定如何处理这个任务:
    1、如果线程数未达到最大线程数,线程池会尝试创建新的线程来执行任务。
    2、如果线程数已达到最大线程数,并且任务队列已满,线程池会根据配置的拒绝策略来处理这个任务(如抛出异常、忽略任务、使用调用者线程执行任务等)。

线程池的优点

  • 降低资源消耗:通过重用已存在的线程,减少了线程创建和销毁的开销。
  • 提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行。
  • 提高线程的可管理性:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。

调整线程池大小

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

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

1、任务执行时间变长:由于线程池中的线程数量有限,当有大量任务需要执行时,任务需要等待其他任务完成才能获取到线程资源,这会导致整体的任务执行时间变长。【RT变大】
2、任务被拒绝:当线程池中的线程都处于忙碌状态,且队列已满时,新提交的任务可能会被拒绝执行。这可能会导致程序出现错误或异常。【报错:RejectedExecutionException】

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

  • AbortPolicy:丟弃任务并抛出RejectedExecutionException异常 【默认的策略】
  • DiscardPolicy:丢弃任务,但是不抛出异常;
  • DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务
  • CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务

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

线程池问题的性能调优

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

1、要求的并发用户数达不到
2、响应时间特别长
3、直接报错丢弃任务。

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

解决办法:
修改tomcat的连接池的配置参数 maxThreads值, 适当的扩大。

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


http://www.ppmy.cn/embedded/141178.html

相关文章

MyBatis-数据库连接池、属性文件config.properties、类名简化、MyBatis的整体架构

一、数据库连接池 1、概述 存储实现创建好的连接对象的容器 2、优点 避免了频繁创建和销毁连接对象 3、使用 在使用到连接对象时可在数据库连接池中直接获取 4、实现 不需要我们去实现,框架和一些第三方有现成的组件(C3P0、ADCP、德鲁伊(阿里巴巴)&#xff…

AIGC:重塑文学的新力量

目录 一.AIGC 为文学创作带来的新机遇 1.激发创意灵感 2.提高创作效率 3.拓展文学风格和形式 4.促进文学的普及和传播 二.AIGC 对文学创作的挑战 1.版权问题 2.文学价值的质疑 3.对人类作家的冲击 三.如何应对 AIGC 对文学的影响 1.明确版权归属 2.提高文学素养 3…

力扣动态规划基础版(字符串应用)

5.最长回文串 5. 最长回文子串https://leetcode.cn/problems/longest-palindromic-substring/ 先全部置为false然后反向遍历。动态规划数组,dp【i】【j】表示从第i到第j 是否是回文串。Arrays.fill表示的是将指定的内容填充到数组中。状态转移方程如下 这个题目用…

UE5 Add Transient Field 节点

在 Unreal Engine 5 (UE5) 中,Add Transient Field 是一个在 Niagara(UE5 的粒子系统和 VFX 工具)中使用的节点。这个节点的功能是动态地将一个 Transient Field(瞬时字段)添加到系统中,并将其应用到粒子系…

使用R语言绘制简单地图的教程

今天主要讲的部分是绘制静态地图,使用的R语言绘图包是tmap,关于介绍就不多讲,下面开始代码的讲解,小白也可以放心食用。 1、绘制简单的单幅地图,这里以新西兰地区为例 #导入必要的包 library(tmap) library(sp) libr…

【Linux】gcc/g++使用

编译 我们知道,gcc只能编译C,g既能编译C,也能编译C。 由于两者的选项是相同的,这里我们使用gcc来说明。 这就是一个我们在linux中gcc编译一段代码后会自动生成一个a.out为名的可执行文件,然后我们./a.out&#xff0c…

centos挂载ntfs或exFAT格式硬盘

记录一下centos系统中重挂载ntfs格式硬盘或exFAT格式硬盘。 首先使用命令 fdisk -l [rootlocalhost test]# fdisk -l ... ... ... ... WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.磁盘 /dev/sde&…

DataWhale—PumpkinBook(TASK05决策树)

课程开源地址及相关视频链接:(当然这里也希望大家支持一下正版西瓜书和南瓜书图书,支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿) Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解》(南瓜…