memcache-clientライブラリ使用時に気になったこと
こんなコードを書いて接続数を増やそうとすると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を見てみるか…