美文网首页
QPS、RT、并发数

QPS、RT、并发数

作者: 晚歌歌 | 来源:发表于2020-03-10 23:11 被阅读0次

    面试问题

    Q:你们系统线程池数量配置多少
    A:核心50个,最大200个,队列2000
    Q:这个数量配置是怎么评估出来的
    A:额。上线前大概先按比较保险的数量配着,上线后观察没有问题的话那就没问题了
    。。。。。

    概念

    • 响应时间:响应时间即RT,处理一次请求所需要的平均处理时间。对于RT,客户端和服务端是大不相同的,因为请求从客户端到服务端,需要经过广域网,所以客户端RT往往远大于服务端RT,同时客户端的RT往往决定着用户的真实体验,服务端RT往往是评估我们系统好坏的一个关键因素。
    • QPS:QPS是每秒钟处理完请求的次数。这里的请求不是指一个查询或者数据库查询,是包括一个业务逻辑的整个流程,也就是说每秒钟响应的请求次数。
    • 并发数:系统同时处理的请求数。假设系统平均响应时间是100MS,QPS为500,那么并发数为RT * QPS=0.1 * 500 = 50
    • 最佳线程数:刚好消耗完服务器瓶颈资源的临界线程数,系统的综合性能随线程数这个值呈抛物线,有一个具体公式,但往往设计的时候不会考虑到如此精细。另外服务器的线程池设计也没有根据这个公式来配置,得经过逐步压测才能得到这个数值。

    配置

    线程池数量基本上可以基于以上三个参数来配置。

    • 如果是服务器线程池,那么假设最大并发数是100,那么核心线程池超过这个最大数量就可以保证请求不会受到阻塞。
      DUBBO的默认业务线程池核心及最大数量是200,队列为SynchronousQueue(容量为0)
    • 如果是其他业务相关线程就得考虑具体业务的调用量:假设最大并发数是100,而调用到该业务的并发数约五分之一,那么核心线程池就可以配置20

    任务

    CPU 密集型任务:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯 CPU 计算。
    IO 密集型任务:比如像 MySQL 数据库、文件的读写、网络通信等任务,这类任务不会特别消耗 CPU 资源,但是 IO 操作比较耗时,会占用比较多时间。

    CPU 密集型任务

    理论上线程的数量 = CPU 核数就是最合适的,不过通常把线程的数量设置为CPU 核数 +1,会实现最优的利用率。即使当密集型的线程由于偶尔的内存页失效或其他原因导致阻塞时,这个额外的线程也能确保 CPU 的时钟周期不会被浪费,从而保证 CPU 的利用率。

    IO 密集型任务

    线程数 = CPU 核心数 * (1 + IO 耗时/ CPU 耗时)

    线程数 = CPU 核心数 / (1 - 阻塞系数)
    其中计算密集型阻塞系数为 0,IO 密集型阻塞系数接近 1,一般认为在 0.8 ~ 0.9 之间。比如 8 核 CPU,按照公式就是 2 / ( 1 - 0.9 ) = 20 个线程数

    即超过CPU核心数2倍差不多

    动态线程池

    Java线程池实现原理及其在美团业务中的实践(转载)

    相关文章

      网友评论

          本文标题:QPS、RT、并发数

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