专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
芋道源码  ·  SpringBoot 实现任意文件在线预览功能 ·  17 小时前  
芋道源码  ·  1.8k ... ·  昨天  
芋道源码  ·  号称取代 Elasticsearch,太猛了! ·  昨天  
芋道源码  ·  一款轻量级的服务器监控神器,开箱即用! ·  2 天前  
Java编程精选  ·  不引入ES,如何利用 MySQL 实现模糊匹配 ·  3 天前  
51好读  ›  专栏  ›  ImportNew

七种 WebSocket 框架的性能比较

ImportNew  · 公众号  · Java  · 2017-01-29 23:14

正文

(点击 上方公众号 ,可快速关注)


来源:鸟窝,

colobu.com/2015/07/14/performance-comparison-of-7-websocket-frameworks/

如有好文章投稿,请点击 → 这里了解详情


前一篇文章《 使用四种框架分别实现百万websocket常连接的服务器 》( http://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/ )介绍了四种websocket框架的测试方法和基本数据。 最近我又使用几个框架实现了websocket push服务器的原型,并专门对这七种实现做了测试。 本文记录了测试结果和一些对结果的分析。

这七种框架是:


  • Netty

  • Undertow

  • Jetty

  • Vert.x

  • Grizzly

  • spray-websocket

  • nodejs-websocket/Node.js


最近用Golang实现了第八种,Go表现还不错。


  • Go


测试环境


使用三台C3.4xlarge AWS服务器做测试。 一台作为服务器,两台作为客户端机器, 每台客户端机器启动10个client,一共20个client

C3.4xlarge的配置如下:



服务器和客户端机器按照上一篇文章做了基本的优化。


以下是测试的配置数据:


  • 20 clients


  • setup rate设为500 * 20 requests/second = 10000 request /second


  • 每个client负责建立50000个websocket 连接


  • 等1,000,000个websocket建好好,发送一个消息(时间戳)给所有的客户端,客户端根据时间戳计算latency


  • 如果服务器setup rate建立很慢,主动停止测试


  • 监控三个阶段的性能指标: setup时, setup完成后应用发呆(idle)时,发送消息时


1 Netty


Setup时


  • cpu idle: 90%

  • minor gc: Few

  • full gc: No


Setup完成, 应用Idle时


  • cpu idle: 100%

  • memory usage: 1.68G

  • server free memory: 16.3G


发送消息时


  • cpu idle: 75%

  • minor gc: few

  • full gc: No

  • Message latency (one client)


count = 50000

min = 0

max = 18301

mean = 2446.09

stddev = 3082.11

median = 1214.00

75%

95%

98%

99%

99.9%


2 Vert.x


Setup时


  • cpu idle: 95%

  • minor gc: Few

  • full gc: No


Setup完成, 应用Idle时


  • cpu idle: 100%

  • memory usage: 6.37G

  • server free memory: 16.3G


发送消息时


  • cpu idle: 47% ~ 76%

  • minor gc: few

  • full gc: few

  • Message latency (one client)


count = 50000

min = 49

max = 18949

mean = 10427.00

stddev = 5182.72

median = 10856.00

75%

95%

98%

99%

99.9%


3 Undertow


Setup时


  • cpu idle: 90%

  • minor gc: Few

  • full gc: No


Setup完成, 应用Idle时


  • cpu idle: 100%

  • memory usage: 4.02G

  • server free memory: 14.2G


发送消息时


  • cpu idle: 65%

  • minor gc: few

  • full gc: No

  • Message latency


count = 50000

min = 1

max = 11948

mean = 1366.86

stddev = 2007.77

median = 412.00

75%

95%

98%

99%

99.9%


4 Jetty


Setup时


  • cpu idle: 2%

  • minor gc: Many

  • full gc: No

  • memory usage: 5G

  • server free memory: 17.2G


当建立360,000左右的websocket时, setup非常的慢, gc频繁,无法继续正常建立websocket, 主动终止测试。


5 Grizzly


Setup时


  • cpu idle: 20%

  • minor gc: Some

  • full gc: Some

  • memory usage: 11.5G

  • server free memory: 12.3G


当建立500,000左右的websocket时, setup非常的慢, gc频繁,无法继续正常建立websocket, 主动终止测试。


6 Spray


Setup时


  • cpu idle: 80%

  • minor gc: Many

  • full gc: No


当建立500,000左右的websocket时, setup非常的慢, gc频繁,无法继续正常建立websocket, 主动终止测试。


7 Node.js


Setup时


  • cpu idle: 94%


Setup完成, 应用Idle时


  • cpu idle: 100%

  • memory usage: 5.0G

  • server free memory: 16.3G


发送消息时


  • cpu idle: 94%

  • Message latency (one client)

  • Message latency


count = 50000

min = 0

max = 18

mean = 1.27

stddev = 3.08

median = 1.00

75%







请到「今天看啥」查看全文