常盤です

rubyでデバグ用TCPプロキシ?みたいなものを作ってみたのですが、
HTTPでアクセスするたびに使用メモリが増えていき解放される気配がありません。
接続はすぐに切断するのでコネクションが残っていることはありませんでした。
何処が不味いところはあるでしょうか? プログラムは以下のようなものです。
-----------
require "socket"
gs = TCPServer.open(80) rescue exit
while gs
  Thread.start(gs.accept) do |s|
    printf("remotehost: %s\n", (s.peeraddr)[2])
    c=(TCPSocket.open("localhost",81) rescue nil)
    if c
      Thread.start() {
        while (ch2=c.sysread(1024)  rescue nil)
          s.syswrite(ch2) rescue nil
          s.flush rescue nil
#          print(ch2)
#          STDOUT.flush
        end
        c.close_read rescue nil
        s.close_write rescue nil
        c.close rescue nil # 不要?
        s.close rescue nil # 不要?
      }
      while (ch=s.sysread(1024) rescue nil)
        c.syswrite(ch) rescue nil
        c.flush rescue nil
        print(ch)
        STDOUT.flush
      end
      c.close_write rescue nil
      s.close_read rescue nil
    else
      s.close
    end
  end
end
-----------
以上