From: Denis Vieira Date: 2006-09-01T09:16:00+09:00 Subject: Testing Threads with connections Hello there, I've been trying to make a stress test generator in ruby for a New IO echo server initially. Mainly, the idea is try to generate as many connections as possible to the echo server, and from time to time, send a string to the server and receive it back. I don't really have much experience in threads programming, and that's the main reason to try it out. For this script, I thought to open threads, and in each thread, do a loop and open connections for each thread. I tried to use 100 threads and in each thread, open 100 connections. It runs fine, no errors reported to me at all, but the echo server shows only ~1200 connections. I've set up the OS settings with ulimit already (open files). What do you guys think ? Any suggestions? Here it goes: -- code #!/usr/bin/ruby require 'socket' if ARGV.length < 3 puts "Use: $0 " exit 1 else thrds=ARGV[0].to_i conec=ARGV[1].to_i tmout=ARGV[2].to_i end DEBUG=1 teststring="denao." host="192.168.0.100" port=50000 threads=[] for num in (1 .. thrds) threads << Thread.new(num) { |loT| printf "Thread (%.0f) opening %.0f connections\n", loT.to_s, conec.to_s sock = [] conec.times do |i| if DEBUG==1 printf "%.0f) Opening socket %.0f... ",loT.to_s,i end sock[i] = TCPsocket::open(host,port) if DEBUG==1 print "done\n" end end while (1) conec.times do |j| if DEBUG==1 printf "%.0f) Sending string on socket %.0f...",loT.to_s,j end sock[j].send teststring, 128 if DEBUG==1 printf "done.\n%.0f) Waiting answer on socket %.0f...",loT.to_s,j end tmp=sock[j].recv(128) if DEBUG==1 if teststring == tmp print "matched!\n" else print "error!\n" end end if DEBUG==2 printf "%.0f) Sleeping %.0fs\n",loT.to_s,tmout.to_s end sleep(tmout) end end } end threads.each { |aThread| aThread.join } -- /code -- Posted via http://www.ruby-forum.com/.