cpu 最佳线程数和QPS以及RT

2023-11-06

最近在关注性能的事情,所以对于多线程程序中,如何设置最佳的线程数,找了一些文章。虽然有公式可以套用,

但是,其实最佳的话只是相对的,了解了过程之后,处理线程数的设置就会游刃有余了。

名字解释:

1、QPS:系统每秒处理的请求数(query per second)

2、RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值

3、最佳线程数量:刚好消耗完服务器瓶颈资源的临界线程数

QPS和RT的关系:

对于单线程:QPS=1000/RT

对于多线程:QPS=1000*线程数量/RT

 

性能的两个点:

吞吐量和延迟,其实通俗的解释就是QPS和RT(我的理解),虽然有上面的公式,但是两者的关系并不是完全线性的。

至于为啥?原因很多,系统表现远远比我们想想的要复杂。

 

最佳线程数有公式吗?

答案是肯定的。

服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量  (CPU瓶颈类型)

在达到最佳线程数的时候,线程数增加,则QPS不变,而响应时间变长,线程数量继续增加,则QPS下降(上下文切换耗时)。

最佳线程数是动态的,在不同的状态下会进行变化。

瓶颈资源可以是CPU、内存、数据库连接池、锁资源、IO等。

超过最佳线程数,会导致资源竞争加剧,同时响应时间也会增加。

 

如何获取最佳线程数呢?

有了公式,其实并没有实质性的解决问题。

1、逐步压测,不断的调整线程数来观察系统的负载,这个最土,但是最实用

2、如果确切的知道瓶颈资源的使用情况,则可以直接使用公式;

3、单用户压测,查看CPU的使用情况,然后基于公式得出一个值,上下微调;


最佳线程数:

性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。
 

为什么要找最佳线程数

1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助
2.找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出
 

最佳线程数的获取:

1、通过用户慢慢递增来进行性能压测,观察QPS,响应时间
2、根据公式计算:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量
3、单用户压测,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量。
 

影响最佳线程数的主要因素:

1、IO
2、CPU
根据公式:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量
一般来说是IO和CPU。IO开销较多的应用其CPU线程等待时间会比较长,所以线程数量可以开的多一些,相反则线程数量要少一些,其实有两种极端,纯IO的应用,比如proxy,则线程数量可以开到非常大(实在太大了则需要考虑线程切换的开销),这种应用基本上后端(比如这个proxy是代理搜索的)的QPS能有多少,proxy就有多少。
另一种是耗CPU的计算,这种情况一般来讲只能开到CPU个数的线程数量。但是并不是说这种应用的QPS就不高,往往这种应用的QPS可以很高。
 

QPS和线程数的关系

1、在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时相应时间持续上升。
2、同一个系统而言,支持的线程数越多(最佳线程数越多而不是配置的线程数越多),QPS越高
 

QPS和响应时间的关系

1、对于一般的web系统,响应时间一般有CPU执行时间+IO等待时间组成
2、CPU的执行时间减少,对QPS有实质的提升,IO时间的减少,对QPS提升不明显。如果要想明显提升QPS,优化系统的时候要着重优化CPU消耗大户。
 

最佳线程数和jvm堆内存得关系:

以上都是依据性能瓶颈在CPU的情况,对于java应用还有一个因素是FULL GC,我们要保证在最佳线程数量下,不会发生频繁FULL GC
根据公式::(小GC时间间隔/rt)*(并发线程数量 * thm) <=young 计算得到的并发线程数量如果<最佳线程数量 则可能导致FULL GC较频繁,实际情况看来这种情况在web系统上非常少。不过可以模拟出来。
所以我们在设置jboss线程的时候,可以利用内存公式计算出来的线程数量来设置,通过压测和计算得到最佳线程数,然后设置线程数。
 

设置线程数量:

压测最佳线程数<真实设置的线程数量<内存极限线程数
比如,通过压测得到某系统的最佳线程数量是10,然后通过内存计算的线程数量是20,则,设置jboss的线程数量为15是可行的,如果直接设置了10,由于系统本身会受到一些依赖系统的变化而产生一些变化,比如系统依赖一些IO的响应时间会突然延长,由于线程数量还是10,其实这个时候最佳线程数量已经变成了13了,由于我们设置死了10,其结果就是导致qps下降,但是如果超过20,则又会引起FULL gc非常频繁,反过来影响QPS的下降。
 

jboss的线程数设置:

对于jboss而言,设置线程数量要看使用了那种线程连接,如http、ajp等
http和ajp的设置是完全一样的,非常简单:
以ajp为例,找到server.xml或者tomcat-server.xml:
默认线程数量是200个
 <Connector port="8009" address="${jboss.bind.address}" connectionTimeout="15000" protocol="AJP/1.3" maxThreads="200" minSpareThreads="40" maxSpareThreads="75" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" useBodyEncodingForURI="true"/>
这里将默认的线程数量改成了20,当然相应的其他最小空闲线程数和最大空闲线程数也做一下调整:
<Connector port="8009" address="${jboss.bind.address}" connectionTimeout="15000" protocol="AJP/1.3" maxThreads="20" minSpareThreads="20" maxSpareThreads="20" maxPostSize="512000" acceptCount="300" bufferSize="16384" emptySessionPath="false" enableLookups="false" redirectPort="8443" useBodyEncodingForURI="true"/>

 

http://www.ibm.com/developerworks/library/j-jtp0730/index.html

http://www.thejoyofcode.com/tuning_the_threadpool.aspx

http://www.infoq.com/articles/Java-Thread-Pool-Performance-Tuning 


转载自:http://iamzhongyong.iteye.com/blog/1924745

http://blog.sina.com.cn/s/blog_4080505a01016o3d.html

参考:http://blog.csdn.net/fullstack/article/details/23712813

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cpu 最佳线程数和QPS以及RT 的相关文章

  • 计算机基础知识

    一 操作系统的作用 xff1a 1 xff1a 管理底层硬件设备 2 xff1a 整合资源 xff0c 提供给上层软件使用 二 硬件资源分类 1 xff1a 计算资源 2 xff1a 存储资源 xff1a 硬盘 U盘 光驱 3 xff1a
  • 自我理解:类模板和模板类、函数模板和模板函数

    一 类模板和模板类 1 类模板 类模板的重点是模板 表示一个专门用来产生类的模板 类模板是对一批仅仅成员数据类型不同的类的抽象 只要为这一批类创建一个类模板 给出一套程序代码 就可以用来生成多种具体的类 模板类 从而大大提高编程的效率 te
  • 超详细进制转换(二进制、八进制、十进制、十六进制)详解

    目录 在学习四种进制转换之前先了解一下自种进制的特点 一 整数转换 1 十进制转R进制 2 R进制转十进制 3 二进制转八进制 十六进制 4 八进制转二进制 二 小数转换 1 十进制转R进制 2 R进制转十进制 在学习四种进制转换之前先了解
  • Ubuntu20.04 Server调整默认分辨率

    问题引入 把一台台式机安装成Ubuntu20 04 Server版本后 发现没有界面操作不方便 又给它装了个桌面 安装完后发现HDMI接到显示器的分辨率只有800 600 而且在系统配置里还不能选择其它的分辨率配置 首先怀疑是不是显卡驱动没
  • 每日30条知识点-软件设计师知识点笔记

    立即寻址最快 寄存器寻址次之 直接寻址最慢 RISC 精简指令集计算机 特点 指令数量少 寻址方式少 长度固定 格式种类少 只提供load store指令访问存储器 以硬布线逻辑控制为主 单周期指令执行 系统总线用于主存以及外设部件连接 R
  • 二进制数的补码及运算

    本人研究不深 如有错误请不吝赐教 先来个最基本的介绍 参考 https blog csdn net jdq8576 article details 82425265 百度百科 https baike baidu com item 补码 源码
  • 自我理解:封装、继承和多态

    一 封装 1 概念 封装就是隐藏对象的属性和实现细节 只对外公开一些操作内部属性的方法 接口 函数 2 目的 增强安全性 简化编程 使用者不必了解具体的实现细节 只需要通过外部接口 就可以对类的内部成员进行操作 class A public
  • [计算机网络]简单入门HTTPS : 确保Web网站安全

    前言 今天也是刚好看到HTTPS 感觉HTTPS有许多需要总结的地方 这里也是花点时间给大伙总结下 今天会从下面几个点入手给大伙介绍 HTTPS如何解决现有的HTTP安全问题 和HTTP的区别 HTTPS建立连接的过程 HTTPS的缺点 其
  • 自我理解:TCP和UDP、HTTP、进程和线程

    一 TCP和UDP 1 什么是TCP和UDP TCP是面向连接的协议 发送数据前要建立连接 TCP提供的是可靠传输 UDP是无连接的协议 发送数据前不需要建立连接 是不可靠传输 2 TCP和UDP的区别 TCP是面向连接的协议 发送数据前要
  • 计网_对广播风暴的抑制【2010考研题】

    下列网络设备中 能够抑制广播风暴的是 中继器 集线器 网桥 路由器 A 仅 和 B 仅 C 仅 和 D 仅 答案 D 解析 考查网络设备与网络风暴 广播域是指网段上所有设备的集合 这些设备收听送往那个网段的所有广播 冲突域是指在同一个冲突域
  • 计算机考研复试常问问题 数据结构篇

    第一章 绪论 1 时间复杂度 时间复杂度 算法执行时所需要的计算工作量 与整个算法的执行时间和基本操作重复的次数成正比 一个语句的频度是指该语句在算法中被重复执行的次数 算法中所有语句的频度之和记为T n O T n 的数量级 数量级 数量
  • 内存碎片是什么?关于内存碎片的解释

    内存碎片是什么 关于内存碎片 内存碎片通常分为内部碎片和外部碎片 内部碎片 所谓内部碎片指的就是 系统为某项功能分派了一定的内存 但是该功能的实现没有用完所有系统分配的 余下的部分就被成为内存碎片的内部碎片 外部碎片 外部内存指的是有一些连
  • CPU的工作原理

    一 CPU的基本概念 CPU 中央处理器 是一块超大规模的集成电路 是一台计算机的运算核心和控制核心 主要功能是解释计算机指令和处理计算机软件中的数据 二 CPU的组成部分 1 运算器 运算器是对数据加工和处理的中心 由算术逻辑单元 状态寄
  • cpu 最佳线程数和QPS以及RT

    最近在关注性能的事情 所以对于多线程程序中 如何设置最佳的线程数 找了一些文章 虽然有公式可以套用 但是 其实最佳的话只是相对的 了解了过程之后 处理线程数的设置就会游刃有余了 名字解释 1 QPS 系统每秒处理的请求数 query per
  • Conda 常用指令 (Mac)【下载 安装 环境配置 查看 创建 激活 配置cuda 拷贝环境】

    本文旨在介绍用conda配置一个新的深度学习环境的全过程 下载Anaconda 在 官网 中下载与python版本匹配的Anaconda Python与Anaconda版本匹配如下 图片源自 该博客 在本例中我下载的 Anaconda3 2
  • 第一章:计算机基础知识——知识点整理

    第一章 计算机基础知识 知识点整理 第一章 计算机基础知识 知识梳理 高频考点 1 1 信息与信息技术 1 1 1 信息与数据 1 1 2 信息社会 1 1 3 信息技术 1 1 4 计算机文化 的内涵 1 2 计算机技术概论 1 2 1
  • LaTex 加粗(加黑)的方式

    1 基本 LaTeX技巧458 关于LaTeX数学字体加粗 mathbf 会变为粗体 但也导致数学字母斜体形式的丢失 使用 amsmath package 的 boldmath 命令 boldmath f x y 3 x y y 2xy 7
  • 计算机考研复试常问问题 计算机网络篇

    一 计算机网络体系结构 1 OSI TCP IP和五层体系结构 五层协议 分为5层 自上到下分别为 应用层 传输层 网络层 数据链路层 物理层 应用层 为特定应用程序提供数据传输服务 传输单位是报文 传输层 为不同主机的进程提供通信服务 传
  • 补码的作用

    补码的作用 避免零在二进制中的歧义 另一个好处就是方便运算 所有运算都能用加法运算器来实现 不再需要减法运算器 其实在计算机中 所有的减法操作都被转化为加法操作 如果想要深入研究 可以看看计算机组成原理 举个简单的例子 正数的补码和反码 原
  • 计算机原码,反码,补码,以及之间的转换 ,计算机底层为什么要用二进制反码和二进制补码

    1 为什么要使用二进制 首先我们需要知道 计算机底层的存储方式 所有数字在计算机底层都以二进制形式存在 二进制数据的存储方式 所有的数值 不管正负 底层都以补码的方式存储 二进制是机器语言 由于计算机并不能像人一样计算与思考 而使用二进制

随机推荐

  • MFC Windows 程序设计[132]之打开按钮的启用与禁用(附源码)

    MFC Windows 程序设计 132 之打开按钮的启用与禁用 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库 class libraries 以C 类的形式封装了Windows
  • jaxb demo

    1 generate java class from xml schema in eclipse ide http theopentutorials com examples java jaxb generate java class fr
  • SpringBoot集成ShardingJDBC系列【1】—— 添加依赖

    文章只负责讲解sharding的相关配置 springboot其他的配置自己解决 文章内容将分开发布 便于平时查阅 添加依赖
  • Python,OpenCV进行直方图反投影

    Python OpenCV进行直方图反投影 1 效果图 2 源码 参考 这篇博客将介绍Python OpenCV中的直方图反投影 直方图反投影用于图像分割或在图像中查找感兴趣的对象 简单地说 它创建了一个与输入图像大小相同 但只有一个通道
  • 02 lego spike prime 测试2

    lego spike prime 的砖块可以插轴 进行连接 跟以往有所不同 特此记录
  • c 语言让两个数组合并,C 语言,将两个数组合并到另外一个数组中,并且合并之后的数组是有序的。...

    int a 10 0 int b 10 0 int c 20 0 printf a数组为 for int i 0 i lt 10 i a i arc4random 40 20 1 1 为数组生成随机元素 printf d a i print
  • 页面上下左右滑动事件

    1 下载插件 npm install vue touch next S 2 main js加入以下代码 import VueTouch from vue touch Vue use VueTouch name v touch VueTouc
  • Kotlin的型变解析(协变、逆变和不变)

    一 首先来看一个例子 import java util author wangdong description 型变 fun main args Array
  • linux运维面试题1

    一 填空题 1 在Linux 系统 中 以文件方式访问设备 2 Linux 内核引导时 从文件 etc fstab中读取要加载的文件系统 3 Linux 文件系统中每个文件用indoe节点来标识 4 全部磁盘块由四个部分组成 分别为引导块
  • 大数据(七):Pandas的基础应用详解(四)

    专栏介绍 结合自身经验和内部资料总结的Python教程 每天3 5章 最短1个月就能全方位的完成Python的学习并进行实战开发 学完了定能成为大佬 加油吧 卷起来 全部文章请访问专栏 Python全栈教程 0基础 再推荐一下最近热更的 大
  • 统计学的基本概念

    转 浅谈协方差矩阵 一 统计学的基本概念 统计学里最基本的概念就是样本的均值 方差 标准差 首先 我们给定一个含有n个样本的集合 下面给出这些概念的公式描述 均值 标准差 方差 均值描述的是样本集合的中间点 它告诉我们的信息是有限的 而标准
  • QT5.15在线安装下载速度慢的解决办法(包括qt6.0beta版)

    下载加速需要使用清华源QT地址 QT软件清华源地址 https mirrors tuna tsinghua edu cn qt一 安装代理软件Fiddler5 1 安装并打开Fiddler5 软件自动启用代理 Fiddler5软件百度搜索
  • 张筑生老师:真正的教授,学术的典范,应该给这类人最好的环境

    今日 偶然浏览一篇博客 张老师的朋友王恳先生博文 关于张筑生老师的 很受感动 张老师已然离去 但其 把数学作为宗教信仰 的观点 以及其勤奋 踏踏实实的做事风格 相信可以影响一批批人 不仅仅是做数学研究的人 中国应该还再多一些像张老师这种人
  • javaweb响应内容类型分析工具(tomcat)

    javaweb响应内容类型分析工具 tomcat 文章目录 javaweb响应内容类型分析工具 tomcat 前言 一 tomcat目录下的配置 二 生成工具 总结 前言 在模仿spring的MVC时 发现返回类型需要设置 不然默认返回te
  • socket阻塞与非阻塞,同步与异步、I/O模型

    socket阻塞与非阻塞 同步与异步 作者 huangguisu 1 概念理解 在进行网络编程时 我们常常见到同步 Sync 异步 Async 阻塞 Block 非阻塞 Unblock 四种调用方式 同步 所谓同步 就是在发出一个功能调用时
  • 使用addr2line 打印调用栈信息调试程序崩溃

    首先参考 https blog csdn net gongmin856 article details 79192259 接下来是我复制下来的代码 命名ttt c include
  • 虚拟机(VM)监控工具

    什么是虚拟机 VM 监控 虚拟机监控是监视在虚拟化环境中创建的各个虚拟机和 VM 的过程 使用虚拟机监控软件 您可以查看可用性状态 性能统计信息并管理连接到主机的虚拟机及其相应的来宾虚拟机 虚拟机监控有什么作用 在主机上安装时 虚拟机监视器
  • 【华为OD机试真题 JAVA】找朋友

    JS版 华为OD机试真题 JS 找朋友 标题 找朋友 时间限制 1秒 内存限制 262144K 语言限制 不限 在学校中 N个小朋友站成一队 第i个小朋友的身高为height i 第i个小朋友可以看到的第一个比自己身高更高的小朋友j 那么j
  • java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes

    问题 今天写SpringBootTest测试的时候 一直报java lang IllegalStateException Found multiple SpringBootConfiguration annotated classes Ge
  • cpu 最佳线程数和QPS以及RT

    最近在关注性能的事情 所以对于多线程程序中 如何设置最佳的线程数 找了一些文章 虽然有公式可以套用 但是 其实最佳的话只是相对的 了解了过程之后 处理线程数的设置就会游刃有余了 名字解释 1 QPS 系统每秒处理的请求数 query per