前言
因為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張),所以就不一一附上了,每個只附上一張

配置與環(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

并發(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)

并發(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

并發(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

并發(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次測試,心都累了
估計讀者看完的東西后,能獲得的東西可能也不會太多,但如果覺得這篇文章,你覺得有幫助,請點個喜歡,支持一下,謝謝,你的支持,我的動力!