diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-03-11 20:56:49 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-03-11 20:59:18 -0800 |
commit | d4faac5480f6416cf92301745a9a9572bc865061 (patch) | |
tree | 4b67cdfa266ee474c320da28cdb2756ceb659e1b /test/test_linux_all_tcp_listen_stats_leak.rb | |
parent | fe2615590d5e8ac8e735200696ec8396fb3cd219 (diff) | |
download | raindrops-d4faac5480f6416cf92301745a9a9572bc865061.tar.gz |
This is a work-in-progress and will probably be modified before the next release.
Diffstat (limited to 'test/test_linux_all_tcp_listen_stats_leak.rb')
-rw-r--r-- | test/test_linux_all_tcp_listen_stats_leak.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/test_linux_all_tcp_listen_stats_leak.rb b/test/test_linux_all_tcp_listen_stats_leak.rb new file mode 100644 index 0000000..1bbdae3 --- /dev/null +++ b/test/test_linux_all_tcp_listen_stats_leak.rb @@ -0,0 +1,43 @@ +# -*- encoding: binary -*- +require 'test/unit' +require 'raindrops' +require 'socket' +require 'benchmark' +$stderr.sync = $stdout.sync = true + +class TestLinuxAllTcpListenStatsLeak < Test::Unit::TestCase + + TEST_ADDR = ENV['UNICORN_TEST_ADDR'] || '127.0.0.1' + + + def rss_kb + File.readlines("/proc/#$$/status").grep(/VmRSS:/)[0].split(/\s+/)[1].to_i + end + def test_leak + s = TCPServer.new(TEST_ADDR, 0) + start_kb = rss_kb + p [ :start_kb, start_kb ] + assert_nothing_raised do + p(Benchmark.measure { + 1000.times { Raindrops::Linux.all_tcp_listener_stats } + }) + end + cur_kb = rss_kb + p [ :cur_kb, cur_kb ] + now = Time.now.to_i + fin = now + 60 + assert_nothing_raised do + 1000000000.times { |i| + if (i % 1024) == 0 + now = Time.now.to_i + break if now > fin + end + Raindrops::Linux.all_tcp_listener_stats + } + end + cur_kb = rss_kb + p [ :cur_kb, cur_kb ] + ensure + s.close + end if ENV["STRESS"].to_i != 0 +end |