em-websocket - ***检测到缓冲区溢出***:ruby终止

时间:2012-09-05 15:11:12

标签: ruby eventmachine ubuntu-12.04 em-websocket

我尝试使用eventmachine + em-websocket + redis来构建通知服务器。我完成几乎所有代码后看起来很不错。但是,当我开始测试连接时,发生了一些事情。连接不能超过1015(我不知道为什么1015)。

我尝试简化代码并找到问题,但我不知道我能做些什么。

Emvironment

  • RVM Ruby ruby​​-1.9.3-p194(也尝试过ree)
  • 服务器:Ubuntu 12.04(也尝试过Mountain Lion)
  • 客户:Mountain Lion

宝石

  • em-websocket 0.3.8
  • eventmachine 0.12.10(也试过1.0.0.beta.4)
  • em-websocket-client 0.1.1

客户端

require 'eventmachine'
require 'em-websocket-client'

EM.run do

  # If I create 1200 connections one time, server will crash. But there is no error message.
  # If I create 1000 connections (1000 connections are connecting) at first and create again, it'll show error message.

  1200.times do |i|

    Fiber.new do
      conn = EventMachine::WebSocketClient.connect("ws://0.0.0.0:8080?channel=channel#{i}")
      conn.callback do
        puts "Connected"
      end

      conn.errback do |e|
        puts "Got error: #{e}"
      end

      conn.stream do |msg|
        puts "got data:"
        puts msg
      end

      conn.disconnect do
        puts "gone"
        EM::stop_event_loop
      end
    end.resume
  end
end

服务器

require 'eventmachine'
require 'em-websocket'

EventMachine.run do

  f1 = Fiber.new do
    EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
        ws.onopen do |data|
          puts "WebSocket connection open"
        end

        ws.onclose do
          puts "Connection closed"
        end

        ws.onmessage do |msg|
          puts "Recieved message: #{msg}"
        end
    end
  end

  f1.resume

end

错误消息

*** buffer overflow detected ***: ruby terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7fd7de40d007]
/lib/x86_64-linux-gnu/libc.so.6(+0x107f00)[0x7fd7de40bf00]
/lib/x86_64-linux-gnu/libc.so.6(+0x108fbe)[0x7fd7de40cfbe]
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so(_ZN14EventMachine_t14_RunSelectOnceEv+0xac)[0x7fd7dcec33dc]
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so(_ZN14EventMachine_t3RunEv+0x5c)[0x7fd7dcec61ec]
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so(+0x1e419)[0x7fd7dceca419]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(+0x175941)[0x7fd7de836941]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(+0x16b609)[0x7fd7de82c609]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(+0x171a9a)[0x7fd7de832a9a]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(rb_iseq_eval_main+0xae)[0x7fd7de838c4e]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(+0x62e62)[0x7fd7de723e62]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(ruby_exec_node+0x1d)[0x7fd7de724c0d]
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9(ruby_run_node+0x1e)[0x7fd7de726cae]
ruby[0x4007fb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7fd7de32576d]
ruby[0x400829]
======= Memory map: ========
00400000-00401000 r-xp 00000000 ca:00 155311                             /usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
00600000-00601000 r--p 00000000 ca:00 155311                             /usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
00601000-00602000 rw-p 00001000 ca:00 155311                             /usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
00c1c000-019ac000 rw-p 00000000 00:00 0                                  [heap]
7fd7db948000-7fd7db952000 r-xp 00000000 ca:00 184566                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/hiredis-0.4.5/lib/hiredis/ext/hiredis_ext.so
7fd7db952000-7fd7dbb51000 ---p 0000a000 ca:00 184566                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/hiredis-0.4.5/lib/hiredis/ext/hiredis_ext.so
7fd7dbb51000-7fd7dbb52000 r--p 00009000 ca:00 184566                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/hiredis-0.4.5/lib/hiredis/ext/hiredis_ext.so
7fd7dbb52000-7fd7dbb53000 rw-p 0000a000 ca:00 184566                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/hiredis-0.4.5/lib/hiredis/ext/hiredis_ext.so
7fd7dbb53000-7fd7dbb54000 r-xp 00000000 ca:00 156027                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/sha1.so
7fd7dbb54000-7fd7dbd53000 ---p 00001000 ca:00 156027                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/sha1.so
7fd7dbd53000-7fd7dbd54000 r--p 00000000 ca:00 156027                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/sha1.so
7fd7dbd54000-7fd7dbd55000 rw-p 00001000 ca:00 156027                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/sha1.so
7fd7dbd55000-7fd7dbd58000 r-xp 00000000 ca:00 156022                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest.so
7fd7dbd58000-7fd7dbf57000 ---p 00003000 ca:00 156022                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest.so
7fd7dbf57000-7fd7dbf58000 r--p 00002000 ca:00 156022                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest.so
7fd7dbf58000-7fd7dbf59000 rw-p 00003000 ca:00 156022                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest.so
7fd7dbf59000-7fd7dbf5a000 r-xp 00000000 ca:00 156025                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/md5.so
7fd7dbf5a000-7fd7dc159000 ---p 00001000 ca:00 156025                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/md5.so
7fd7dc159000-7fd7dc15a000 r--p 00000000 ca:00 156025                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/md5.so
7fd7dc15a000-7fd7dc15b000 rw-p 00001000 ca:00 156025                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/digest/md5.so
7fd7dc15b000-7fd7dc171000 r-xp 00000000 ca:00 14677                      /lib/x86_64-linux-gnu/libz.so.1.2.3.4
7fd7dc171000-7fd7dc370000 ---p 00016000 ca:00 14677                      /lib/x86_64-linux-gnu/libz.so.1.2.3.4
7fd7dc370000-7fd7dc371000 r--p 00015000 ca:00 14677                      /lib/x86_64-linux-gnu/libz.so.1.2.3.4
7fd7dc371000-7fd7dc372000 rw-p 00016000 ca:00 14677                      /lib/x86_64-linux-gnu/libz.so.1.2.3.4
7fd7dc372000-7fd7dc387000 r-xp 00000000 ca:00 14632                      /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd7dc387000-7fd7dc586000 ---p 00015000 ca:00 14632                      /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd7dc586000-7fd7dc587000 r--p 00014000 ca:00 14632                      /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd7dc587000-7fd7dc588000 rw-p 00015000 ca:00 14632                      /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd7dc588000-7fd7dc66a000 r-xp 00000000 ca:00 1654                       /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7fd7dc66a000-7fd7dc869000 ---p 000e2000 ca:00 1654                       /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7fd7dc869000-7fd7dc871000 r--p 000e1000 ca:00 1654                       /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7fd7dc871000-7fd7dc873000 rw-p 000e9000 ca:00 1654                       /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7fd7dc873000-7fd7dc888000 rw-p 00000000 00:00 0 
7fd7dc888000-7fd7dc8da000 r-xp 00000000 ca:00 16804                      /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fd7dc8da000-7fd7dcada000 ---p 00052000 ca:00 16804                      /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fd7dcada000-7fd7dcadd000 r--p 00052000 ca:00 16804                      /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fd7dcadd000-7fd7dcae3000 rw-p 00055000 ca:00 16804                      /lib/x86_64-linux-gnu/libssl.so.1.0.0
7fd7dcae3000-7fd7dcae4000 rw-p 00000000 00:00 0 
7fd7dcae4000-7fd7dcc83000 r-xp 00000000 ca:00 16817                      /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fd7dcc83000-7fd7dce82000 ---p 0019f000 ca:00 16817                      /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fd7dce82000-7fd7dce9d000 r--p 0019e000 ca:00 16817                      /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fd7dce9d000-7fd7dcea8000 rw-p 001b9000 ca:00 16817                      /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
7fd7dcea8000-7fd7dceac000 rw-p 00000000 00:00 0 
7fd7dceac000-7fd7dced4000 r-xp 00000000 ca:00 172584                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so
7fd7dced4000-7fd7dd0d3000 ---p 00028000 ca:00 172584                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so
7fd7dd0d3000-7fd7dd0d5000 r--p 00027000 ca:00 172584                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so
7fd7dd0d5000-7fd7dd0d7000 rw-p 00029000 ca:00 172584                     /usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-0.12.10/lib/rubyeventmachine.so
7fd7dd0d7000-7fd7dd0d9000 r-xp 00000000 ca:00 156000                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/trans/transdb.so
7fd7dd0d9000-7fd7dd2d9000 ---p 00002000 ca:00 156000                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/trans/transdb.so
7fd7dd2d9000-7fd7dd2da000 r--p 00002000 ca:00 156000                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/trans/transdb.so
7fd7dd2da000-7fd7dd2db000 rw-p 00003000 ca:00 156000                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/trans/transdb.so
7fd7dd2db000-7fd7dd2dd000 r-xp 00000000 ca:00 155966                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/encdb.so
7fd7dd2dd000-7fd7dd4dc000 ---p 00002000 ca:00 155966                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/encdb.so
7fd7dd4dc000-7fd7dd4dd000 r--p 00001000 ca:00 155966                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/encdb.so
7fd7dd4dd000-7fd7dd4de000 rw-p 00002000 ca:00 155966                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-linux/enc/encdb.so
7fd7dd4de000-7fd7dd7a7000 r--p 00000000 ca:00 43369                      /usr/lib/locale/locale-archive
7fd7dd7a7000-7fd7dd8a0000 r-xp 00000000 ca:00 14638                      /lib/x86_64-linux-gnu/libm-2.15.so
7fd7dd8a0000-7fd7dda9f000 ---p 000f9000 ca:00 14638                      /lib/x86_64-linux-gnu/libm-2.15.so
7fd7dda9f000-7fd7ddaa0000 r--p 000f8000 ca:00 14638                      /lib/x86_64-linux-gnu/libm-2.15.so
7fd7ddaa0000-7fd7ddaa1000 rw-p 000f9000 ca:00 14638                      /lib/x86_64-linux-gnu/libm-2.15.so
7fd7ddaa1000-7fd7ddaaa000 r-xp 00000000 ca:00 14625                      /lib/x86_64-linux-gnu/libcrypt-2.15.so
7fd7ddaaa000-7fd7ddcaa000 ---p 00009000 ca:00 14625                      /lib/x86_64-linux-gnu/libcrypt-2.15.so
7fd7ddcaa000-7fd7ddcab000 r--p 00009000 ca:00 14625                      /lib/x86_64-linux-gnu/libcrypt-2.15.so
7fd7ddcab000-7fd7ddcac000 rw-p 0000a000 ca:00 14625                      /lib/x86_64-linux-gnu/libcrypt-2.15.so
7fd7ddcac000-7fd7ddcdb000 rw-p 00000000 00:00 0 
7fd7ddcdb000-7fd7ddcdd000 r-xp 00000000 ca:00 14628                      /lib/x86_64-linux-gnu/libdl-2.15.so
7fd7ddcdd000-7fd7ddedd000 ---p 00002000 ca:00 14628                      /lib/x86_64-linux-gnu/libdl-2.15.so
7fd7ddedd000-7fd7ddede000 r--p 00002000 ca:00 14628                      /lib/x86_64-linux-gnu/libdl-2.15.so
7fd7ddede000-7fd7ddedf000 rw-p 00003000 ca:00 14628                      /lib/x86_64-linux-gnu/libdl-2.15.so
7fd7ddedf000-7fd7ddee6000 r-xp 00000000 ca:00 14665                      /lib/x86_64-linux-gnu/librt-2.15.so
7fd7ddee6000-7fd7de0e5000 ---p 00007000 ca:00 14665                      /lib/x86_64-linux-gnu/librt-2.15.so
7fd7de0e5000-7fd7de0e6000 r--p 00006000 ca:00 14665                      /lib/x86_64-linux-gnu/librt-2.15.so
7fd7de0e6000-7fd7de0e7000 rw-p 00007000 ca:00 14665                      /lib/x86_64-linux-gnu/librt-2.15.so
7fd7de0e7000-7fd7de0ff000 r-xp 00000000 ca:00 14662                      /lib/x86_64-linux-gnu/libpthread-2.15.so
7fd7de0ff000-7fd7de2fe000 ---p 00018000 ca:00 14662                      /lib/x86_64-linux-gnu/libpthread-2.15.so
7fd7de2fe000-7fd7de2ff000 r--p 00017000 ca:00 14662                      /lib/x86_64-linux-gnu/libpthread-2.15.so
7fd7de2ff000-7fd7de300000 rw-p 00018000 ca:00 14662                      /lib/x86_64-linux-gnu/libpthread-2.15.so
7fd7de300000-7fd7de304000 rw-p 00000000 00:00 0 
7fd7de304000-7fd7de4b7000 r-xp 00000000 ca:00 14622                      /lib/x86_64-linux-gnu/libc-2.15.so
7fd7de4b7000-7fd7de6b6000 ---p 001b3000 ca:00 14622                      /lib/x86_64-linux-gnu/libc-2.15.so
7fd7de6b6000-7fd7de6ba000 r--p 001b2000 ca:00 14622                      /lib/x86_64-linux-gnu/libc-2.15.so
7fd7de6ba000-7fd7de6bc000 rw-p 001b6000 ca:00 14622                      /lib/x86_64-linux-gnu/libc-2.15.so
7fd7de6bc000-7fd7de6c1000 rw-p 00000000 00:00 0 
7fd7de6c1000-7fd7de8d9000 r-xp 00000000 ca:00 155313                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9.1
7fd7de8d9000-7fd7dead8000 ---p 00218000 ca:00 155313                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9.1
7fd7dead8000-7fd7deadd000 r--p 00217000 ca:00 155313                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9.1
7fd7deadd000-7fd7deae1000 rw-p 0021c000 ca:00 155313                     /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.so.1.9.1
7fd7deae1000-7fd7deafd000 rw-p 00000000 00:00 0 
7fd7deafd000-7fd7deb1f000 r-xp 00000000 ca:00 14613                      /lib/x86_64-linux-gnu/ld-2.15.so
7fd7dec02000-7fd7dec03000 rw-p 00000000 00:00 0 
7fd7dec03000-7fd7dec04000 ---p 00000000 00:00 0 
7fd7dec04000-7fd7ded18000 rw-p 00000000 00:00 0 
7fd7ded19000-7fd7ded1a000 ---p 00000000 00:00 0 
7fd7ded1a000-7fd7ded1f000 rw-p 00000000 00:00 0                          [stack:16253]
7fd7ded1f000-7fd7ded20000 r--p 00022000 ca:00 14613                      /lib/x86_64-linux-gnu/ld-2.15.so
7fd7ded20000-7fd7ded22000 rw-p 00023000 ca:00 14613                      /lib/x86_64-linux-gnu/ld-2.15.so
7fffe3620000-7fffe3641000 rw-p 00000000 00:00 0                          [stack]
7fffe3776000-7fffe3777000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted (core dumped)

我认为有一些可能性:

  1. OS核心问题。我可以更改一些设置来修复它。
  2. Ruby问题
  3. EventMachine问题
  4. em-websocket问题
  5. 任何人都可以给我一些提示,谢谢:)

1 个答案:

答案 0 :(得分:1)

首先,查看this answer以增加打开文件限制。 其次,您不必将服务器既不包装光纤中的客户端也不必在EM.run循环内运行它。