美文网首页
如何提升吞吐量-QPS三要素

如何提升吞吐量-QPS三要素

作者: 夜阑人儿未静 | 来源:发表于2020-12-22 20:39 被阅读0次

影响系统吞吐量的因素有哪些呢?下面层QPS三要素 线程、响应时间、瓶颈资源做分析

1.线程

设置多少线程合适?

  • 设置过多
  • 设置过少

对象的生命周期,内存的占用总量,内核态与用户态的切换

场景一

  • cpu计算时间18ms(running)
  • 查询数据库,网络io时间80ms(waiting)
  • 解析结果2ms
  • 如果服务器2CPU,大家看看这里多少线程合适?

在充分利用CPU资源的情况下:

线程数量 = (18+80+2)/(18+2) * 2 = 10

结论1:以CPU计算为性能瓶颈

线程数量=((CPU时间+CPU等待时间) / CPU时间) * CPU数量

场景二

  • 线程同步锁(数据库事务锁)50ms
  • cpu时间18ms
  • 查询数据库,网络io时间80ms
  • 解析结果2ms

以CPU计算为瓶颈,计算线程数量

线程数=(18 + 2 + 50 + 80) / 20 * 2 = 15

以线程同步锁为瓶颈,计算线程数

线程数=(50 + 18 + 2 + 80) / 50 * 1/1 = 3

结论2:已线程阻塞资源为瓶颈

瓶颈资源的线程并行数=瓶颈资源的总份数/单次请求占用瓶颈资源的份数
 
线程数量 =(线程总时间/瓶颈资源时间) * 瓶颈资源的线程并行数

2.响应时间

响应时间决定QPS?

QPS = 1000/响应时间 * 线程数量
实例
线程数量=线程总时间/瓶颈资源时间 * 瓶颈资源并行数
线程数量=(30+10+30+10+20)/ (10 + 10 + 20) * 4 = 10
 
 
QPS = 线程数量 * 1000/响应总时间
QPS = 10 * 1000/(30+10+30+10+20)
    = 100

改进,将查询操作并行

优化后
线程数量=线程总时间/瓶颈资源时间 * 瓶颈资源并行数
线程数量=(30+10+10+20)/ (10 + 10 + 20) * 4 = 9
 
 
QPS = 线程数量 * 1000/响应总时间
QPS = 9 * 1000/(30+10+10+20)
    = 100

结论3:QPS = 1000/瓶颈资源时间 * 瓶颈资源并行数

线程数量=线程总时间/瓶颈资源时间 * 瓶颈资源幵行数
 
QPS = 线程数量 * 1000/线程总时间
 
===>
 
QPS = 1000/瓶颈资源时间 * 瓶颈资源并行数

3.瓶颈资源

要分析系统的瓶颈资源,需求对系统特性做个区分,分析出系统是哪种类型的系统

  • IO密集型系统
    定义:IO密集型,即该任务需要大量的IO,即大量的阻塞。
    在单线程上运行IO密集型任务会导致浪费大量的CPU运算能力浪费在等待。
    所以IO密集型任务中使用多线程可以大大的加速程序运行,即使在单核CPU上,这种加速主要利用了被浪费掉的阻塞时间。

     第一种配置方式:
     由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程。
     配置公式:CPU核数 * 2
    
    
     第二种配置方式:
     IO密集型时,大部分线程都阻塞,故需要多配置线程数。
     配置公式:CPU核数 / (1 – 阻塞系数)(0.8~0.9之间)
     比如:8核 / (1 – 0.9) = 80个线程数
    
  • CPU密集型系统
    定义:CPU密集型的意思就是该任务需要大量运算,而没有阻塞,CPU一直全速运行
    CPU密集型任务只有在真正的多核CPU上才可能得到加速(通过多线程)
    CPU密集型任务配置尽可能少的线程数
    CPU密集型线程数配置公式:(CPU核数+1)个线程的线程池

相关文章

网友评论

      本文标题:如何提升吞吐量-QPS三要素

      本文链接:https://www.haomeiwen.com/subject/ckqenktx.html