性能对比 cruby 2.1 vs jruby 1.7.9 vs rubinius 2.2.3

简介: 圣诞节的时候发布了Ruby 2.1,使用RGenGC,性能提升了5%到15%. 那么,新版的Ruby实现和JRuby、Rubinius相比又如何呢?

圣诞节的时候发布了Ruby 2.1,使用RGenGC,性能提升了5%到15%. 那么,新版的Ruby实现和JRuby、Rubinius相比又如何呢?

image.png

Posăceanu Marian做了一个性能测试,对比了cruby、jruby和rubinius.

Marian使用的是ApacheBench,2.3. 性能测试有更好的工具,例如siege。但是ApacheBench的优势是足够简单。

使用如下命令启动ApacheBench:

ab -n400 -c16 -T'application/json' http://localhost:3000/entries

cruby

# config/unicorn.rb

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)

timeout 15

preload_app true

before_fork do |server, worker|

 # et cetera

end

命令:

unicorn_rails -c config/unicorn.rb -p3000

结果:

Concurrency Level:      16

Time taken for tests:   6.769seconds

Complete requests:      400

Failed requests:        0

Write errors:           0

Total transferred:      3611600bytes

HTML transferred:       3346800bytes

Requests per second:    59.09 [#/sec] (mean)

Time per request:       270.766 [ms] (mean)

Time per request:       16.923 [ms] (mean, acrossallconcurrentrequests)

Transfer rate:          521.03 [Kbytes/sec] received

ConnectionTimes(ms)

             min  mean[+/-sd] median   max

Connect:        0    0   1.0      0       5

Processing:    49  267  36.8    270     331

Waiting:       44  266  36.8    269     330

Total:         49  267  36.3    270     331

Percentageoftherequestsservedwithinacertaintime(ms)

 50%    270

 66%    283

 75%    288

 80%    293

 90%    308

 95%    315

 98%    324

 99%    327

100%    331(longestrequest)


Rubinius 2.2.3

# config/puma.rb

threads8,32

workers1

preload_app!

on_worker_boot do

 # et cetera

end

命令

puma -C config/puma.rb -b tcp://localhost:3000

结果

Concurrency Level:      16

Time taken for tests:   9.383seconds

Complete requests:      400

Failed requests:        0

Write errors:           0

Total transferred:      3590400bytes

HTML transferred:       3346800bytes

Requests per second:    42.63 [#/sec] (mean)

Time per request:       375.311 [ms] (mean)

Time per request:       23.457 [ms] (mean, acrossallconcurrentrequests)

Transfer rate:          373.69 [Kbytes/sec] received

ConnectionTimes(ms)

             min  mean[+/-sd] median   max

Connect:        0    0   0.1      0       1

Processing:    84  371105.4    348     731

Waiting:       83  363104.1    338     728

Total:         84  371105.3    348     732

Percentageoftherequestsservedwithinacertaintime(ms)

 50%    348

 66%    390

 75%    431

 80%    458

 90%    526

 95%    571

 98%    640

 99%    683

100%    732(longestrequest)


jruby

# config/puma.rb

threads 8,32

preload_app!

on_worker_boot do

 ActiveSupport.on_load(:active_record)do

   ActiveRecord::Base.establish_connection

 end

end

命令:

puma -C config/puma.rb -b tcp://localhost:3000

注意需要替换Gem:

# gem 'pg'

gem 'activerecord-jdbcpostgresql-adapter'

结果:

Concurrency Level:      16

Time taken for tests:   4.019seconds

Complete requests:      400

Failed requests:        0

Write errors:           0

Total transferred:      3590400bytes

HTML transferred:       3346800bytes

Requests per second:    99.53 [#/sec] (mean)

Time per request:       160.760 [ms] (mean)

Time per request:       10.048 [ms] (mean, acrossallconcurrentrequests)

Transfer rate:          872.42 [Kbytes/sec] received

ConnectionTimes(ms)

             min  mean[+/-sd] median   max

Connect:        0    0   0.1      0       1

Processing:    35  158  31.5    157     389

Waiting:       34  151  27.1    149     261

Total:         36  158  31.5    157     389

Percentageoftherequestsservedwithinacertaintime(ms)

 50%    157

 66%    166

 75%    173

 80%    177

 90%    189

 95%    204

 98%    232

 99%    260

100%    389(longestrequest)


结论

每个机器上的情况可能有所差异,在你自己的机器上运行上面的测试代码,结果会比较准确。

在多核机器上,jruby和rubinius的性能会有明显提升。

jruby       99.53 #################################

cruby       59.09 ###################

rubinius    42.63 ##############

可以看出,在性能上,JRuby具有明显优势。不过,使用JRuby的话,一些C库需要替换。好在现在大多数gem都支持JRuby了。

更新 感谢ShiningRay指出,jruby开启--serverinvokedynamic性能会更好

相关文章
|
JavaScript 前端开发 API
|
10月前
|
边缘计算 JavaScript 前端开发
「玩透ESA」别只把 ESA 当 CDN 用!它的“边缘函数”如何极大扩展 DCDN 场景
阿里云ESA不止是CDN,更是一个可编程的边缘平台。通过边缘函数(ER),开发者能在全球3200+节点运行JavaScript代码,实现A/B测试、API鉴权、动态响应等场景,将逻辑前置到离用户最近处,实现毫秒级响应与源站减负,开启“编程思维”的边缘计算新时代。
641 1
|
运维 数据可视化 定位技术
破局数据中心运维:AR 智能眼镜巡检如何“大显神通”?
AR智能眼镜巡检技术通过虚实融合,将设备状态、操作指引等信息实时叠加至真实场景,有效解决传统数据中心巡检中效率低、易出错、依赖经验等问题。应用于日常巡检、故障排查与远程协作,显著提升运维效率与可靠性,助力数据中心智能化升级。
破局数据中心运维:AR 智能眼镜巡检如何“大显神通”?
|
11月前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
447 3
|
存储 缓存 搜索推荐
session 详解:掌握客户端会话管理
session 详解:掌握客户端会话管理
Mac 复制文件名目录路径
Mac 复制文件名目录路径
3396 0
|
安全 JavaScript Unix
开源协议不能随便选!选错直接被「背刺」
程序员晚枫带你了解开源协议的重要性!选错协议,你的项目可能被“闭源背刺”或“专利埋雷”。本文详解7大常见协议:GPL、MIT、Apache 2.0、BSD、LGPL、MPL/EPL和Creative Commons。每种协议适用不同场景,例如GPL适合技术民主化,MIT让代码自由传播,Apache 2.0提供专利保护。晚枫结合自身开源项目经验,分享选协议秘籍,助你避免法律风险,守护技术遗产不被滥用。记得查LICENSE文件,别等律师函来了才后悔!
1515 7
|
存储 缓存 负载均衡
带你读《存储漫谈Ceph原理与实践》第三章接入层3.3.文件存储 CephFS(一)
《存储漫谈Ceph原理与实践》第三章接入层3.3.文件存储 CephFS
带你读《存储漫谈Ceph原理与实践》第三章接入层3.3.文件存储 CephFS(一)
|
人工智能 前端开发 搜索推荐
人工智能(AI)在前端设计中的创新应用
人工智能(AI)在前端设计中的创新应用
663 4
|
Docker 容器
docker 镜像源大全
docker 镜像源大全
115593 3
docker 镜像源大全

热门文章

最新文章