定制线程池大小:最佳线程数

优化线程数量的主要工作就是避免“过大”或者“过小”,两种极端情况。

如果线程数过大,那么会导致对稀缺CPU和内存资源的竞争,会导致内存的使用量过高,可能导致资源耗尽。

如果过小,由于存在很多可用处理器资源未在工作,会对吞吐量造成损失;

建议:如果有不同类别的任务,并且它们拥有差别很大的行为,考虑使用多个线程池,这样每个线程池可以根据不同任务的工作负载进行调节优化;

最终目标:提升QPS

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

1、IO:密集型(线程等待时间较长)

2、CPU:计算密集型(CPU核心处理器数量是前提)

公式:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量

具体可以通过监控或者压测得出计算相关参数;


一般做法:

扫描二维码关注公众号,回复: 5766733 查看本文章

如果是IO密集型应用,则线程池大小设置为2N+1;

如果是CPU密集型应用,则线程池大小设置为N+1;

N代表CPU的核数。


QPS和线程数的关系

1、在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时响应时间持续上升。

2、同一个系统而言,支持的线程数越多(最佳线程数越多而不是配置的线程数越多),QPS越高

QPS和响应时间的关系

1、对于一般的web系统,响应时间一般有CPU执行时间+IO等待时间组成

2、CPU的执行时间减少,对QPS有实质的提升,IO时间的减少,对QPS提升不明显。如果要想明显提升QPS,优化系统的时候要着重优化CPU消耗较大的业务。

猜你喜欢

转载自blog.csdn.net/qq_36807862/article/details/88914959