(点击上方公众号,可快速关注)
泉源:鸟窝
链接:colobu.com/2015/07/14/performance-comparison-of-7-websocket-frameworks/
前一篇文章利用四种框架分别实现百万websocket常毗连的服务器先容了四种websocket框架的测试方法和根本数据。近来我又利用几个框架实现了websocketpush服务器的原型,并专门对这七种实现做了测试。本文记录了测试结果和一些对结果的分析。
这七种框架是:
Netty
Undertow
Jetty
Vert.x
Grizzly
spray-websocket
nodejs-websocket/Node.js
近来用Golang实现了第八种,Go表现还不错。
Go
测试环境
利用三台C3.4xlargeAWS服务器做测试。一台作为服务器,两台作为客户端呆板,每台客户端呆板启动10个client,一共20个client
C3.4xlarge的设置如下:
型号vCPU内存(GiB)SSD存储(GB)
c3.large23.752x16
c3.xlarge47.52x40
c3.2xlarge8152x80
c3.4xlarge16302x160
c3.8xlarge32602x320
服务器和客户端呆板按照上一篇文章做了根本的优化。
以下是测试的设置数据:
20clients
setuprate设为500*20requests/second=10000request/second
每个client负责创建50000个websocket毗连
等1,000,000个websocket建好好,发送一个消息(时间戳)给全部的客户端,客户端根据时间戳盘算latency
假如服务器setuprate创建很慢,主动克制测试
监控三个阶段的性能指标:setup时,setup完成后应用发呆(idle)时,发送消息时
测试结果
Netty
Setup时
cpuidle:90%
minorgc:Few
fullgc:No
Setup完成,应用Idle时
cpuidle:100%
memoryusage:1.68G
serverfreememory:16.3G
发送消息时
cpuidle:75%
minorgc:few
fullgc:No
Messagelatency(oneclient)
count=50000
min=0
max=18301
mean=2446.09
stddev=3082.11
median=1214.00
75%3625.00
95%8855.00
98%12069.00
99%13274.00
99.9%18301.00
Vert.x
Setup时
cpuidle:95%
minorgc:Few
fullgc:No
Setup完成,应用Idle时
cpuidle:100%
memoryusage:6.37G
serverfreememory:16.3G
发送消息时
cpuidle:47%~76%
minorgc:few
fullgc:few
Messagelatency(oneclient)
count=50000
min=49
max=18949
mean=10427.00
stddev=5182.72
median=10856.00
75%14934.00
95%17949.00
98%18458.00
99%18658.00
99.9%18949.00
Undertow
Setup时
cpuidle:90%
minorgc:Few
fullgc:No
Setup完成,应用Idle时
cpuidle:100%
memoryusage:4.02G
serverfreememory:14.2G
发送消息时
cpuidle:65%
minorgc:few
fullgc:No
Messagelatency
count=50000
min=1
max=11948
mean=1366.86
stddev=2007.77
median=412.00
75%2021.00
95%5838.00
98%7222.00
99%8051.00
99.9%11948.00
Jetty
Setup时
cpuidle:2%
minorgc:Many
fullgc:No
memoryusage:5G
serverfreememory:17.2G
当创建360,000左右的websocket时,setup非常的慢,gc频仍,无法继承正常创建websocket,主动停止测试。
Grizzly
Setup时
cpuidle:20%
minorgc:Some
fullgc:Some
memoryusage:11.5G
serverfreememory:12.3G
当创建500,000左右的websocket时,setup非常的慢,gc频仍,无法继承正常创建websocket,主动停止测试。
Spray
Setup时
cpuidle:80%
minorgc:Many
fullgc:No
当创建500,000左右的websocket时,setup非常的慢,gc频仍,无法继承正常创建websocket,主动停止测试。
Node.js
Setup时
cpuidle:94%
Setup完成,应用Idle时
cpuidle:100%
memoryusage:5.0G
serverfreememory:16.3G
发送消息时
cpuidle:94%
Messagelatency(oneclient)
Messagelatency
count=50000
min=0
max=18
mean=1.27
stddev=3.08
median=1.00
75%1.00
95%1.00
98%1.00
99%1.00
99.9%15.00
Go
Setup时
cpuidle:94%
Setup完成,应用Idle时
cpuidle:100%
memoryusage:15G
serverfreememory:6G
发送消息时
cpuidle:94%
Messagelatency(oneclient)
Messagelatency
count=50000
min=0
max=35
mean=1.89
stddev=1.83
median=1.00
75%1.00
95%2.00
98%2.00
99%4.00
99.9%34.00
测试结果分析
Netty,Go,Node.js,Undertow,Vert.x都能正常创建百万毗连。Jetty,Grizzly和Spray未能完成百万毗连
Netty表现最好。内存占用非常的少,CPU利用率也不高。尤其内存占用,远远小于别的框架
Jetty,Grizzly和Spray会产生大量的中心对象,导致垃圾采取频仍。Jetty表现最差
Node.js表现非常好。尤其是测试中利用单实例单线程,创建速率非常快,消息的latency也很好。内存占用也不错
Undertow表现也不错,内存占用比Netty高一些,别的差不多
这里还未测到Spray另一个不好的地方。在大量毗连的环境小,纵然没有消息发送,Spray也会占用40%CPU时间
-------------保举------------
范品社推出的极客T恤,含程序员、影戏、美剧和物理题材,面料舒服、100%纯棉,有黑、白、灰、藏青色,单件¥59.9、两件减¥12、四件减¥28、六件减¥42,详见网店商品页先容。
(上面为部分T恤格局)
网店地点:https://fanpinshe.taobao.com
淘口令:复制以下赤色内容,然后打开手淘即可购买
范品社,利用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)
我要评论