主流web服務(wù)器性能測試

前言

因為boss要一個并發(fā)能上W得平臺,而且還是要PHP得...恩..好吧,我是不喜歡php的,但是沒辦法,誰叫PHP是世界上最好得語言呢。
于是心血來潮,來了一組 web服務(wù)器性能測試,測試有

  • php7-fpm(docker) + nginx
  • java 8 + tomcat 9
  • node.js 5 + express4 +pm2

本來想自己寫一個C得web服務(wù)器實現(xiàn)得,不過已經(jīng)有nginx了,而且寫著累,測試中沒有加入 python,ruby,go,因為不大熟悉,如果你覺得很想看一下,留言一下,我再去跑測試

對于截圖得問題,截圖太多了(3*4*2張),所以就不一一附上了,每個只附上一張

桌面截圖.png

配置與環(huán)境

CPU:I7-4710QM 8線程(4核超線程)
內(nèi)存:12G DDR3 1600MHZ
硬盤:530M/S固態(tài)
系統(tǒng):ubuntu linux 16.04TLS
網(wǎng)絡(luò): 本機(jī)!!請注意與實際的差別

(暫時想不起還有什么配置沒說了,漏了請留言)

相關(guān)命令

  • TOP:用來查看linux資源占用情況
  • PM2:一個帶均衡負(fù)載的進(jìn)程管理器,用于node多進(jìn)程啟動(作用不限于此)
  • docker:一個系統(tǒng)容器,本人就是用它來快速搭載PHP7的
  • ab:一個性能測試程序,我在win下也喜歡用它,siege發(fā)揮不出服務(wù)器的性能,其他還沒測試
  • ulimit:系統(tǒng)的限制,-n 可以修改允許打開文件數(shù),ab并發(fā)需求

開始測試

Nginx

nginx-2.png
并發(fā):100 次數(shù):1W
結(jié)果:0.3S  (0.287, 0.294, 0.305) 
估算處理數(shù):34000次/秒  (34801, 34024, 32767)
并發(fā):2W 次數(shù):2W
結(jié)果:0.7S  (0.714, 0.708, 0.707) 
估算處理數(shù):28000次/秒  (28015,  28264, 28290)

并發(fā):2W 次數(shù):100W 下的資源占用測試

完成時間:33S
ab: CPU:98.6% 內(nèi)存:0.7%
進(jìn)程占用:4-8進(jìn)程 (主要4線程)
CPU占用率: 31% 28% 15% 11%
內(nèi)存占用:0.2-0.9 (基本沒變化)
結(jié)論

nginx 還是非常不錯的,占用的內(nèi)存,CPU資源都很少,C語言效率還是很好的

php7-fpm(docker)

php-2.png
并發(fā):100 次數(shù):1W
結(jié)果:1S  (1.033, 1.060, 1.064) 
估算處理數(shù):9500次/秒  (9678, 9430, 9401)
并發(fā)數(shù)在php中比較難以控制,而且出現(xiàn)了訪問錯誤
前面部分的讀取時間很快
后面部分的讀取時間很慢
并發(fā)2W 次數(shù)2W時 需要60秒
并發(fā)1W 次數(shù)2W時 需要30秒
并發(fā)5K 次數(shù)2W時 需要30秒
并發(fā):1W 次數(shù):1W
結(jié)果:???S  (31.782, 53.001, 16.327) 
估算處理數(shù):???次/秒  (629, 377, 1224)
(╯‵□′)╯︵┻━┻

并發(fā)385  次數(shù)2W時 需要 4秒
并發(fā)1000 次數(shù)2W時 需要 4.5秒
并發(fā)2000 次數(shù)2W時 需要 16, 4.3, 7.1, 8.4 秒
(╯‵□′)╯︵┻━┻

并發(fā):385 次數(shù):100W 下的資源占用測試

完成時間:119S
ab: CPU:51% 內(nèi)存:0.7%
進(jìn)程占用: nginx:4-8進(jìn)程 php-fpm: 4-8進(jìn)程
CPU占用率:  php-fpm:都在大約25%; nginx:和上面測試大約相同; 其他還有其他古怪的線程...
內(nèi)存占用:0.1% (每進(jìn)程)
奇怪的線程截圖
結(jié)論

就是它拖了我這么長的時間..大并發(fā)時不穩(wěn)定,資源利用不太好,印象中效率比較差
可能是優(yōu)化還沒到位吧
一開始測試文件也有問題 1W次 要4.5秒....發(fā)現(xiàn)是代碼加了include其他的初始化文件...
所以其實PHP這樣繼續(xù)寫下來,還是有一定的問題的(但是有優(yōu)化方案)

java 8 + tomcat 9

java-2.png
并發(fā):100 次數(shù):10000
結(jié)果:0.5S  (0.974, 0.576, 0.510, 0.404, 0.424, 0.424) 
估算處理數(shù):22000次/秒  (10264, 17360, 19591, 24747, 23611, 23577)

最大并發(fā):20000 (ab上限2W)

并發(fā):20000 次數(shù):20000
結(jié)果:1S (0.5s/10000次)  (1.698, 1.466, 1.240, 1.060, 0.888, 1.012) 
估算處理數(shù):19000次/秒  (11778,  13647, 16134, 18860, 22527, 19754)

并發(fā):20000 次數(shù):100W 下的資源占用測試 (重啟容器)

完成時間:46S
ab: CPU:98.6% 
進(jìn)程占用:1進(jìn)程 多線程
CPU占用率:  220-450% 多數(shù)情況在220%左右,偶爾飆升
內(nèi)存占用:  迅速飆升到 11%,后緩慢上升至15%
結(jié)論

越訪問越快....但是占用內(nèi)存比較多,可能是GC還沒到位

node.js 5 + express4 +pm2

java-2.png
并發(fā):100 次數(shù):10000
結(jié)果:1S  (1.276, 0.932, 0.904, 0.890) 
估算處理數(shù):10000次/秒  (7834, 10724, 11059, 11234)

最大并發(fā):20000 (ab上限2W)

并發(fā):20000 次數(shù):20000
結(jié)果:1.7S (0.8s/10000次)  (1.910, 1.657, 1.649, 1.755) 
估算處理數(shù):11000次/秒  (10469,  12072, 12128, 11398)

并發(fā):20000 次數(shù):100W 下的資源占用測試 (重啟容器)

完成時間: 93s
ab: CPU:74% 
pm2: CPU:98.7%
進(jìn)程占用:8進(jìn)程(手動設(shè)置)
CPU占用率:  60%
內(nèi)存占用:  0.7基本不變
結(jié)論

目前是我比較喜歡的語言,運(yùn)行效率一般,還行,開發(fā)效率高一點,沒有明顯的重大缺陷

后語

這個測試,斷斷續(xù)續(xù)做了我2周多...,每次發(fā)現(xiàn)都能發(fā)現(xiàn)有點不合理的地方,然后重新跑……跑到我都累了,每次跑都有一定的誤差

重新編譯 ab ,優(yōu)化 nginx+php配置,等等讓我重新跑了N次測試,心都累了

估計讀者看完的東西后,能獲得的東西可能也不會太多,但如果覺得這篇文章,你覺得有幫助,請點個喜歡,支持一下,謝謝,你的支持,我的動力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容