今天心血來潮队贱,想做下壓力測試芳绩,以前重來沒有試過
工具
- wrk极舔,根據(jù)官方的介紹
wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi->core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and >kqueue.
wrk是一個現(xiàn)代的HTTP基準(zhǔn)測試工具啃匿,能夠在單個多核CPU上運行時產(chǎn)生顯著的負載馏锡。它將多線程設(shè)計與可
擴展事件通知系統(tǒng)(如epoll和kqueue)相結(jié)合雷蹂。
總之這是一個http測試工具,用法可以自行上網(wǎng)查詢
- pm2杯道,根據(jù)pm2的介紹我們可以使用匪煌,pm2 monit來查看性能數(shù)據(jù),或者使用keymetrics(pm2的在線可視化性能檢測工具)來監(jiān)測性能党巾,使用方法自行搜索
概念
在開始測試之前萎庭,我們需要了解一下 系統(tǒng)吞吐量(TPS)、用戶并發(fā)量齿拂、性能測試概念和公式,我們關(guān)心的也大多都是并發(fā)量驳规,tps,和響應(yīng)時間這3者,wrk中也正好有對應(yīng)三者的測試結(jié)果
我們用wrk測試了一下署海,可以看到在300的并發(fā)量下吗购,持續(xù)測試10s的時間一共產(chǎn)生了1w個請求,平均響應(yīng)時間是266ms砸狞,但是最大的已經(jīng)超過了2s捻勉,tps是1k左右,但是也可以看到159個左右的請求連接超時
同時我們自己使用express搭建一個簡單的服務(wù)器刀森,使用pm2來看看硬件性能的使用情況
可以看到cpu已經(jīng)滿載運行踱启,內(nèi)存使用了126m
壓測結(jié)束后
cpu和內(nèi)存瞬間降低,表示了我們的服務(wù)器身體還是挺好的
開始測試
目標(biāo)
首先我們需要定下目標(biāo)研底,和環(huán)境埠偿,目前我使用分配了i7-4710mq的4線程和內(nèi)存的4g給虛擬機,我們需要express默認主頁的百萬日pv榜晦,根據(jù)系統(tǒng)的平均并發(fā)用戶數(shù)和并發(fā)數(shù)峰值如何估算這文章的算法冠蒋,我們?nèi)绻獙崿F(xiàn)100w的日pv那么我們需要服務(wù)器的至少要會接到15個請求每秒左右并且響應(yīng)時間要小于50ms(這個是我從淘寶首頁看到的)才正常但是我們的頁面十分簡單,我們要求平均20ms內(nèi)響應(yīng)90%響應(yīng)時間定為36ms乾胶,那么我們服務(wù)器需要處理的并發(fā)量就是45.
總的來說浊服,我們需要在45的并發(fā)下達到平均響應(yīng)時間20ms统屈,90%響應(yīng)時間為36ms
初次測試
我們在45并發(fā)下發(fā)現(xiàn)我們的平均響應(yīng)時間為34多ms,每秒處理1k請求牙躺,超過我們的需求
優(yōu)化
當(dāng)前我們是處于單進程,我們需要使用pm2 內(nèi)置的負載均衡腕扶,開啟多線程
我們開啟了4個進程孽拷,可以看到現(xiàn)在的響應(yīng)時間很接近20毫秒了
總結(jié)
由此做了個初略的結(jié)論,在百萬級別的pv下nodejs還是可以支持的住的