From 818d6be281bf8f3e1b98f26b666e7b5a5416db8f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 15 May 2016 08:41:40 +0000 Subject: test/test_client_expire: fix for high RLIMIT_NOFILE The ab(1) command we use for testing is limited to 20000 open connections under Debian jessie; a perfectly reasonable limit to avoid port exhaustion. I never noticed this limit before, but systemd under Jessie seems to have upped the default RLIMIT_NOFILE to 65536(!), causing ab to error out. We don't even need 10K connections for testing, we just need to hit *some* limit before we start expiring. So lower the RLIMIT_NOFILE back to 1024 in the forked server process so we can test more quickly without running out of ports or memory, since exhausting the 65536 RLIMIT_NOFILE limit is not going to happen with a single TCP address. --- test/test_client_expire.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/test_client_expire.rb b/test/test_client_expire.rb index b2f932b..b6dec1a 100644 --- a/test/test_client_expire.rb +++ b/test/test_client_expire.rb @@ -99,6 +99,14 @@ class TestClientExpire < Testcase end stderr_path err.path end + + # 1024 is common on old systems, but nowadays Jessie seems to be 65536 + nr = Process.getrlimit(:NOFILE)[0] + if nr >= 1024 + nr = 1024 + do_rlimit = true + end + pid = mkserver(cfg) do keep = { $stderr => true, $stdout => true, $stdin => true, @srv => true } ObjectSpace.each_object(IO) do |obj| @@ -108,7 +116,9 @@ class TestClientExpire < Testcase rescue IOError # could be uninitialized end end + Process.setrlimit(:NOFILE, nr) if do_rlimit end + f = get_tcp_client(host, port) f.write "G" s = get_tcp_client(host, port) @@ -119,10 +129,9 @@ class TestClientExpire < Testcase assert_match(%r{keep-alive}, str) sleep 1 - # ignore errors, just beat the crap out of the process - nr = Process.getrlimit(:NOFILE)[0] # 1024 is common assert_operator nr, :>, 666, "increase RLIM_NOFILE (ulimit -n)" nr -= 50 + # ignore errors, just beat the crap out of the process opts = { out: "/dev/null", err: "/dev/null", close_others: true } begin pids = 2.times.map do -- cgit v1.2.3-24-ge0c7