`
CharlesCui
  • 浏览: 433275 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Eventmachine的性能测试

阅读更多
Reactor pattern的实现目前有如下几个 写道

Implementations

The ADAPTIVE Communication Environment (C++)
xSocket (Java)
Apache MINA (Java)
POE (Perl)
Twisted (Python)
EventMachine (Ruby)


JE中有篇文章介绍了Eventmachine,请参见http://dustin.iteye.com/blog/223664

服务端:
硬件:DELL1950,2*4CPU,8G内存
操作系统:
引用
[root@PerfTestApp3 ~]# uname -a
Linux PerfTestApp3 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 GNU/Linux


服务端EM的代码:
require 'rubygems'
require 'eventmachine'

module Echo
  def receive_data data
    send_data data+"-Agent : EventMachine"
    puts data 
  end
end

EM.run {
  EM.start_server "0.0.0.0", 3080, Echo
}

服务端单进程方式启动

客户端:
Loadrunner直接请求,代码如下:

Action()
{
    web_reg_find("Text=Hello!",
                 "Search=All",
                 LAST);

    web_custom_request("EM", "Method=POST", 
       "URL=http://10.2.226.39:3080/",
       "Body=Hello!" ,
       LAST); 

	return 0;
}


TPS最高是1200,不稳定,如图:




TPS1200时的系统资源如下:
引用
top - 14:43:38 up 25 days,  3:55,  3 users,  load average: 0.13, 0.25, 0.16
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.1% us,  2.1% sy,  0.0% ni, 93.8% id,  0.0% wa,  0.1% hi,  0.0% si
Mem:   8306064k total,  7201996k used,  1104068k free,   236304k buffers
Swap:  2031608k total,        0k used,  2031608k free,  6028396k cached

  PID USER      PR  NI %CPU    TIME+  %MEM  VIRT  RES  SHR S COMMAND                                                               
13011 alisoft   25   0   20 315:19.60  6.9 1543m 561m  51m S java                                                                  
9565 root      16   0   20   2:38.57  0.1 15628  10m 2148 S ruby                                                                  
9146 root      16   0    9   1:15.67  0.0  8860 2356 1844 S sshd 


服务器的并发连接情况如下:

引用
[root@PerfTestApp3 ~]# netstat -an |grep 3080
tcp        0      0 0.0.0.0:3080                0.0.0.0:*                   LISTEN     
tcp        0    292 10.2.226.39:3080            10.2.226.15:45249           ESTABLISHED
tcp        0    292 10.2.226.39:3080            10.2.226.15:45251           ESTABLISHED
tcp        0      1 10.2.226.39:3080            10.2.226.15:45260           LAST_ACK   
tcp        0    292 10.2.226.39:3080            10.2.226.15:45256           ESTABLISHED
tcp        0      0 10.2.226.39:3080            10.2.226.15:45268           ESTABLISHED
tcp        0    292 10.2.226.39:3080            10.2.226.15:45277           ESTABLISHED
tcp        0    292 10.2.226.39:3080            10.2.226.15:45278           ESTABLISHED
tcp        0      0 10.2.226.39:3080            10.2.226.15:45279           ESTABLISHED
[root@PerfTestApp3 ~]# netstat -an |grep 3080 | grep ESTABLISHED -c
11
[root@PerfTestApp3 ~]# netstat -an |grep 3080 | grep ESTABLISHED -c
9
[root@PerfTestApp3 ~]# netstat -an |grep 3080 | grep ESTABLISHED -c
9
[root@PerfTestApp3 ~]#


可见平均10个并发。

再做一个单EventMachine实例支持最大并发连接数测试

还是上面那个Eventmachine实例,客户端的并发从50开始,每分钟递增50个,看最大的并发数到多少还可以支撑。

结果是250并发的时候就降下来了,然后失去响应。看图:




  • 大小: 94 KB
  • 大小: 101.8 KB
分享到:
评论

相关推荐

    thin.gem eventmachine.gem

    Thin服务器以其高效、简洁和灵活性著称,常被用作Rails应用的开发和测试服务器。它支持多线程和非阻塞I/O,能够处理大量并发连接,这得益于其背后的EventMachine库。 "eventmachine"是Ruby的一个核心库,提供了异步...

    em-websocket-master

    这个项目很可能是一个基于EventMachine的Websocket服务器实现,EventMachine是一个C++编写的高性能异步事件库,常用于Ruby编程语言。 【描述】"em-websocket-master" 的描述没有给出具体信息,但根据命名习惯,可以...

    DNS服务器RubyDNS.zip

    另外,RubyDNS包含一个基于EventMachine之上的高性能异步DNS解析器。这个模块可以脱离整个RubyDNS服务器在客户端的应用程序里独立使用。 完全可编程的DNS服务器:无缝集成数据库系统,服务器和缓存系统。 强大...

    同步amqp客户端_A synchronous amqp client

    由于AMQP协议通常涉及异步操作,如发送和接收消息,不使用eventmachine可能会影响到性能,但它简化了编程模型,使代码更易理解和调试。 同步AMQP客户端解决了缓冲消息和ack响应的问题。在AMQP中,消息发送到队列后...

    em_underground

    4. **测试用例**:可能包含测试代码,用于验证 EventMachine 示例的正确性,并帮助开发者理解如何测试异步代码。 5. **文档**:项目可能包含有关如何理解和使用这些示例的说明,以及对 EventMachine API 的简要介绍...

    manning.ruby.in.practice.mar.2009.pdf

    它可能介绍了EventMachine、Celluloid等库的使用,以及如何设计响应速度快、资源利用率高的异步Ruby应用程序。通过学习异步编程,开发者可以构建高并发、低延迟的实时系统。 总之,《Ruby in Practice》这本书全面...

    ruby大纲资料.txt

    在Ruby实用技巧中,测试驱动开发(TDD)、测试框架、调试和性能分析工具、日志记录和错误处理等知识点也非常重要。Ruby的测试工具如RSpec和Minitest提供了编写单元测试和集成测试的框架,而byebug等调试工具帮助...

    sensu-extension-influxdb:InfluxDB的处理程序扩展

    支持执行此操作的两种方法: InfluxDB Rubygem库EventMachine 我将两种方法都放在这里进行测试。 这可能有点脏。 将此作为扩展而不是处理程序插件可以提供更好的性能。 由于每秒都会产生大量指标,因此使用常规处理...

    Ruby-Puma一个Ruby的并发Web服务器

    5. **性能**:Puma在许多基准测试中表现出色,通常比其他Ruby Web服务器(如Webrick、Thin等)更快。它在高并发场景下尤其出色,能有效应对突发流量。 6. **兼容性**:Puma与大多数Ruby版本和Rails版本兼容,包括...

    Enterprise Integration with Ruby

    Ruby的EventMachine库提供了处理异步事件的能力,适合构建高并发的系统。同时,微服务架构允许将大型应用分解为小而独立的服务,Ruby的Docker支持和框架如Hanami可以帮助实现这一目标。 企业级集成还关注测试和持续...

    async_sinatra:Sinatra的一个插件,可提供DSL扩展以使用Thin进行异步响应

    Thin是一个基于EventMachine的轻量级、高性能的Ruby web服务器。EventMachine是一个强大的库,它支持非阻塞I/O和回调机制,适用于构建高效的异步网络应用。当async_sinatra与Thin结合时,Sinatra应用可以利用...

    Ruby编程,实用程序员指南Programming Ruby, The Pragmatic Programmer's Guide

    - **性能分析**:使用工具如`Benchmark`进行性能测试。 - **内存管理**:合理使用内存,避免内存泄漏等问题。 - **异步编程**:利用EventMachine等库实现非阻塞IO操作。 ### 六、总结 《Ruby编程,实用程序员指南》...

    Ruby-TorS一个命令行的torrent搜索应用

    6. **事件驱动编程**:Ruby的`EventMachine`库可用于实现非阻塞I/O,提高命令行应用的性能和响应性。 7. **测试**:使用如`RSpec`或`MiniTest`进行单元测试和集成测试,确保代码的正确性和稳定性。 学习和理解Ruby-...

    ruby-使用ruby开发的跨平台代码编辑器.zip

    8. **性能优化**:虽然Ruby的运行速度相对较慢,但可以通过优化代码、使用C扩展或JRuby(运行在Java虚拟机上的Ruby实现)等方式提高性能,特别是在处理大量文本或进行复杂计算时。 综上所述,利用Ruby开发跨平台...

    Programming Ruby 1.9 The Pragmatic Programmers' Guide

    12. **并发和事件驱动编程**:Ruby支持线程和进程,并且有EventMachine这样的事件驱动库,帮助开发者构建高性能的异步应用。 通过阅读《Programming Ruby 1.9 The Pragmatic Programmers' Guide》,读者不仅能掌握...

    rb2-examples:kimsQ Rb 2扩展

    8. **异步编程**:Ruby的EventMachine或者Celluloid库可以用于异步I/O,提高性能。示例可能涉及到这些库的使用,以及如何在Ruby中实现并发处理。 9. **Gem的创建和发布**:如果`rb2-examples`是为创建自定义的Ruby ...

    网络集群化代理服务器 Swiftiply.zip

    Swiftiply是一个针对Web应用程序设计的集群代理服务器,它的出现是为了优化网络性能并提供高可用性。这个系统的核心特点在于其独特的设计,使得后端应用能够更好地与之协同工作,从而提升服务质量和用户体验。...

    celluloid-smtp:基于赛璐ul的简单SMTP服务器

    Celluloid-SMTP服务器的实现受到EventMachine的启发,EventMachine是另一个流行的Ruby事件库,用于构建高性能、非阻塞I/O的应用程序。然而,Celluloid-SMTP并没有直接依赖EventMachine,而是利用了Celluloid库提供的...

    training_curriculum

    9. **性能优化**:分析Ruby代码性能的工具(如Benchmark和Profiler),以及代码优化技巧,如避免全局变量、使用惰性枚举等。 10. **部署与持续集成**:了解如何将Ruby应用部署到服务器,使用Capistrano或Heroku,...

    Ruby-Games:我为服务器端Ruby类所做的Ruby游戏

    虽然这些通常需要高性能的语言来实现,但Ruby的灵活性可以用于快速原型设计和测试。 8. **脚本系统** - Ruby自身就是一个强大的脚本语言,开发者可能会创建一个脚本系统,让游戏设计师可以通过Ruby脚本来调整游戏...

Global site tag (gtag.js) - Google Analytics