数百/千tcpソケットと合理的な瞬?
-
21-08-2019 - |
質問
を使用していMerb::キャッシュ保存txt/xmlとしていることにお気づきなってもらえまmerbs走行の大量のtcpソケットをしていまopen--これが主要なパフォーマンスの課題です。
lsof | grep 11211 | wc -l 494
merb 27206 root 71u IPv4 13759908 TCP localhost.localdomain:59756->localhost.localdomain:11211 (ESTABLISHED) merb 27206 root 72u IPv4 13759969 TCP localhost.localdomain:59779->localhost.localdomain:11211 (ESTABLISHED) merb 27206 root 73u IPv4 13760039 TCP localhost.localdomain:59805->localhost.localdomain:11211 (ESTABLISHED) merb 27206 root 74u IPv4 13760052 TCP localhost.localdomain:59810->localhost.localdomain:11211 (ESTABLISHED) merb 27206 root 75u IPv4 13760135 TCP localhost.localdomain:59841->localhost.localdomain:11211 (ESTABLISHED) merb 27206 root 76u IPv4 13760823 TCP localhost.localdomain:59866->localhost.localdomain:11211 (ESTABLISHED) merb 27206 root 77u IPv4 13760951 TCP localhost.localdomain:52095->localhost.localdomain:11211 (ESTABLISHED)
など---。
私の関連するコード:
if !exists?(:memcached) then register(:memcached, Merb::Cache::MemcachedStore, :namespace => 'mynamespace', :servers => ['127.0.0.1:11211']) end
&&
when :xml unless @hand_xml = Merb::Cache[:memcached].read("/hands/#{@hand.id}.xml") @hand_xml = display(@hand) Merb::Cache[:memcached].write("/hands/#{@hand.id}.xml", @hand_xml) end return @hand_xml
このコード直出しに誤りがあった私は、私の間違い版memcache??
していまmemcached1.2.8 っています:
libmemcached-0.25.14.tar.gz memcached-0.13.逸品
このような運転ん..
解決
私はいくつかのものを考え出しkは..
1)あなたがepollをまたは何か他のものを利用して、ライブラリを使用していると仮定するとmemcachedのために接続されているソケットの数百/数千人を持っているために、合理的なことができます - あなたは私のようなルビーを使用している場合しかし、私はLIBを認識していませんよそれは、選択以外の何か()やpoll()を利用し - したがって、これは、この質問/すぐに出たい。
打ちます あなたは私のようなものであれば、2)あなただけの今実行している1台のmemcachedサーバを持っていると雑種のカップルは/ PROBすべきrequests..thereforeあなたのmemcache接続の世話をして走り回って薄くなります。雑種犬の数よりも多くなることはありませ/あなたは(唯一のものの1または2組のキャッシュあなたと仮定して)実行している薄くなる - 私の場合でした。
ここで修正です。
は、使用しているlibに実際に何memcacheのをラップmemcachedの宝石ではなく、Merbの:: Cacheを介してセットアップmemcacheの(
MMCACHE = Memcached.new("localhost:11211")
を取得/あなたの値を設定します:
@cache = MMCACHE.clone
begin
@hand_xml = @cache.get("/hands/#{@hand.id}.xml")
rescue
@hand_xml = display(@hand)
@cache.set("/hands/#{@hand.id}.xml", @hand_xml)
end
@cache.quit
後ろに座ると、あなたがこれを行うと、今風邪原因の一つを飲みます:
lsof | grep 11211 | wc -l
あなたの代わりに2036年の2または3のようなものを参照してください!
memcacheの接続は永続的であるために、それはで開始することも珍しくありませんことを私にでcluingための岩礁に小道具
他のヒント
いつも助けることができるようになっ必要な物語になる。お久しぶりです、どらすこです。
時間があったクラスターの10apacheのsslサーバに設定されてちょうど100スレッドです。また、クラスターの10memcachedサーバを同一ボックスは、すべての っ 穏やかに暮ら.両apacheのmemcachedのたガード monitました。
その後、王の設置第11回apacheのsslサーバmemcachedの始めに再起動ランダムに数時間おきに!キング究活動を開始しかった?があったバグのphp memcacheのモジュールの文書とそのデフォルトのコンストラクタのmemcacheのconnectionオブジェクトが ない 根強いるのだそうでした。何が起こった全てのphpスレッドがとり様につき1000)を開設して接続毎に瞬時にプールがえる必要がなかったので開催されます。また10*100つべてのmemcachedサーバーでしたが、11のサーバーで1100として1024<1100.最大数のソケットのためのmemcached1024.すべてのソケットした、monitデーモンきっ再開のmemcached.
各ストーリーについてないです。では、何らの王なのか。た障害者の持続的な接続、彼らはすべての幸せに暮らしましたとさは、接続数のクラスターをピークに5.サーバはいたhudgeデータ量で高まって1000スペアソケットで安くしたとの交渉、memcacheの接続毎ます。
誠に申し訳ございませんがわからないにrubyのように認識していチ額のスレッドまたはキャッシュすので間違っています。
幸運を祈っています。