影響系統(tǒng)吞吐量的因素有哪些呢?下面層QPS三要素 線程、響應(yīng)時(shí)間、瓶頸資源做分析
1.線程
設(shè)置多少線程合適?
- 設(shè)置過多
- 設(shè)置過少
對(duì)象的生命周期,內(nèi)存的占用總量,內(nèi)核態(tài)與用戶態(tài)的切換
場(chǎng)景一
- cpu計(jì)算時(shí)間18ms(running)
- 查詢數(shù)據(jù)庫(kù),網(wǎng)絡(luò)io時(shí)間80ms(waiting)
- 解析結(jié)果2ms
- 如果服務(wù)器2CPU,大家看看這里多少線程合適?
在充分利用CPU資源的情況下:
線程數(shù)量 = (18+80+2)/(18+2) * 2 = 10
結(jié)論1:以CPU計(jì)算為性能瓶頸
線程數(shù)量=((CPU時(shí)間+CPU等待時(shí)間) / CPU時(shí)間) * CPU數(shù)量
場(chǎng)景二
- 線程同步鎖(數(shù)據(jù)庫(kù)事務(wù)鎖)50ms
- cpu時(shí)間18ms
- 查詢數(shù)據(jù)庫(kù),網(wǎng)絡(luò)io時(shí)間80ms
- 解析結(jié)果2ms
以CPU計(jì)算為瓶頸,計(jì)算線程數(shù)量
線程數(shù)=(18 + 2 + 50 + 80) / 20 * 2 = 15
以線程同步鎖為瓶頸,計(jì)算線程數(shù)
線程數(shù)=(50 + 18 + 2 + 80) / 50 * 1/1 = 3
結(jié)論2:已線程阻塞資源為瓶頸
瓶頸資源的線程并行數(shù)=瓶頸資源的總份數(shù)/單次請(qǐng)求占用瓶頸資源的份數(shù)
線程數(shù)量 =(線程總時(shí)間/瓶頸資源時(shí)間) * 瓶頸資源的線程并行數(shù)
2.響應(yīng)時(shí)間
響應(yīng)時(shí)間決定QPS?
QPS = 1000/響應(yīng)時(shí)間 * 線程數(shù)量

線程數(shù)量=線程總時(shí)間/瓶頸資源時(shí)間 * 瓶頸資源并行數(shù)
線程數(shù)量=(30+10+30+10+20)/ (10 + 10 + 20) * 4 = 10
QPS = 線程數(shù)量 * 1000/響應(yīng)總時(shí)間
QPS = 10 * 1000/(30+10+30+10+20)
= 100
改進(jìn),將查詢操作并行

線程數(shù)量=線程總時(shí)間/瓶頸資源時(shí)間 * 瓶頸資源并行數(shù)
線程數(shù)量=(30+10+10+20)/ (10 + 10 + 20) * 4 = 9
QPS = 線程數(shù)量 * 1000/響應(yīng)總時(shí)間
QPS = 9 * 1000/(30+10+10+20)
= 100
結(jié)論3:QPS = 1000/瓶頸資源時(shí)間 * 瓶頸資源并行數(shù)
線程數(shù)量=線程總時(shí)間/瓶頸資源時(shí)間 * 瓶頸資源幵行數(shù)
QPS = 線程數(shù)量 * 1000/線程總時(shí)間
===>
QPS = 1000/瓶頸資源時(shí)間 * 瓶頸資源并行數(shù)
3.瓶頸資源
要分析系統(tǒng)的瓶頸資源,需求對(duì)系統(tǒng)特性做個(gè)區(qū)分,分析出系統(tǒng)是哪種類型的系統(tǒng)
-
IO密集型系統(tǒng)
定義:IO密集型,即該任務(wù)需要大量的IO,即大量的阻塞。
在單線程上運(yùn)行IO密集型任務(wù)會(huì)導(dǎo)致浪費(fèi)大量的CPU運(yùn)算能力浪費(fèi)在等待。
所以IO密集型任務(wù)中使用多線程可以大大的加速程序運(yùn)行,即使在單核CPU上,這種加速主要利用了被浪費(fèi)掉的阻塞時(shí)間。第一種配置方式: 由于IO密集型任務(wù)線程并不是一直在執(zhí)行任務(wù),則應(yīng)配置盡可能多的線程。 配置公式:CPU核數(shù) * 2 第二種配置方式: IO密集型時(shí),大部分線程都阻塞,故需要多配置線程數(shù)。 配置公式:CPU核數(shù) / (1 – 阻塞系數(shù))(0.8~0.9之間) 比如:8核 / (1 – 0.9) = 80個(gè)線程數(shù) CPU密集型系統(tǒng)
定義:CPU密集型的意思就是該任務(wù)需要大量運(yùn)算,而沒有阻塞,CPU一直全速運(yùn)行
CPU密集型任務(wù)只有在真正的多核CPU上才可能得到加速(通過多線程)
CPU密集型任務(wù)配置盡可能少的線程數(shù)
CPU密集型線程數(shù)配置公式:(CPU核數(shù)+1)個(gè)線程的線程池