読者です 読者をやめる 読者になる 読者になる

memcache-clientライブラリ使用時に気になったこと

memcached ruby

こんなコードを書いて接続数を増やそうとすると40接続あたりで一気に全ての接続が切れてしまう。

require 'rubygems'
require 'memcache'

1.upto(100) do 
  c = MemCache.new 'localhost:11211'
  c.stats
  sleep 0.3
end
sleep 200

tcpdumpで眺めていたらmemcacheクライアントであるRubyスクリプトから切断しているもよう。

以下のコードだと接続は切れない。

require 'rubygems'
require 'memcache'

ca = []
1.upto(100) do 
  c = MemCache.new 'localhost:11211'
  c.stats
  ca << c
  sleep 0.3
end
sleep 200

とか

require 'rubygems'
require 'memcache'

1.upto(100) do 
  Thread.new do
    c = MemCache.new 'localhost:11211'
    c.stats
    sleep 100
  end
  sleep 0.3
end
sleep 200

コードの違いからするとガベコレのタイミングでTCP close()しているようにも思えるけど、Rubyではデストラクタがないからなぁ… どうやってるんだろう?

追記:何か勘違いしていたので補足 => http://d.hatena.ne.jp/komamitsu/20090426/1240751698


ちなみに以下のコードだと当然TCP close()は発生しない。

require 'socket'

1.upto(10000) do 
  c = TCPSocket.new '127.0.0.1', 11211
  sleep 0.3
end
sleep 200

まぁ明日にでも、memcache-clientを見てみるか…