سؤال

أنا باستخدام Merb::مخبأ لتخزين txt/xml و قد لاحظت أن يعد أترك بلدي merbs تشغيل أكبر كمية من فتح مأخذ توصيل tcp لقد فتح -- وأعتقد أن هذا هو الذي يسبب بعض مشاكل الأداء.

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??

لدي أعطها 1.2.8 ويكون التالية:

libmemcached-0.25.14.tar.gz أعطها-0.13.جوهرة

هذا هو نوع من يقود لي مجنون..

هل كانت مفيدة؟

المحلول

ك فكنت أحسب بعض الاشياء ..

1) يمكن أن يكون من المعقول أن يكون مئات / آلاف مآخذ توصيل أعطها على افتراض انك تستخدم مكتبة التي تستخدم epoll أو أي شيء آخر - ولكن، إذا كنت تستخدم روبي مثلي أنا لست على علم ليب التي تستخدم شيئا آخر غير تحديد () أو استطلاع () - ولهذا يضرب هذا السؤال / يريدون الخروج فورا

2) إذا كنت مثلي لديك فقط 1 الخادم أعطها تشغيل في الوقت الحالي واثنين من النغول / يخفف يركض رعاية requests..therefore اتصالات memcache الخاصة بك ينبغي أن غالبا. أن يكون هناك أكثر من عدد النغول / يخفف لديك على التوالي (على افتراض انك فقط التخزين المؤقت 1 أو مجموعتين من الأشياء) - التي كانت حالتي

وهنا الإصلاح:

والإعداد memcache من خلال جوهرة أعطها بدلا من merb :: ذاكرة التخزين المؤقت (الذي يلتف الواقع مهما 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

وترى شيئا مثل 2 أو 3 بدلا من 2036!

والدعائم لالشعاب لالدلالة لي لأنه ليس من غير المألوف للاتصالات memcache أن تكون مستمرة لتبدأ

نصائح أخرى

وأنا قد تكون قادرة على المساعدة لكن أريد أن أروي قصة للقيام بذلك.ومن هنا.

ذات مرة كان هناك مجموعة من 10 أباتشي(ssl) ملقمات تكوين بالضبط 100 كل المواضيع.هناك أيضا مجموعة من 10 أعطها خوادم (على نفس مربعات) ، وأنهم جميعا بدا إلى العيش بسلام.كل أباتشي و أعطها كانت محروسة من قبل الشر monit الخفي.

ثم ملك تثبيت 11 أباتشي(ssl) server و أعطها بدأ تشغيل بشكل عشوائي كل بضع ساعات!الملك بدأ التحقيق ماذا وجد ؟ كان هناك خلل في php memcache وحدة الوثائق التي قال أن منشئ افتراضي memcache كائن اتصال لا مستمرة, ولكن على ما يبدو كان.ما حدث هو أن كل php الخيط (و هناك مثل 1000 منهم), فتح اتصال إلى كل أعطها في المسبح عندما احتاج واحد ، كما عقدت عليه.كانت هناك 10*100 وصلات إلى كل أعطها الخادم وكان على ما يرام ، ولكن مع 11 خوادم كان 1100 و 1024<1100.أقصى عدد مفتوح من مآخذ أعطها كان 1024.عندما تكون جميع المقابس اتخذت ، monit الشيطان لا ربط لذلك هو إعادة تشغيل أعطها.

كل قصة لديها أخلاقية.ماذا الملك تفعل كل هذا ؟ هو تعطيل الاتصالات المستمرة وأنهم جميعا يعيشون في سعادة دائمة مع عدد من الاتصالات على الكتلة وتبلغ ذروتها في 5 (خمسة).تلك كانت خوادم خدمة hudge كمية البيانات ، لذلك لم نتمكن من 1000 الغيار مآخذ كان أرخص للتفاوض memcache اتصال على كل طلب.

أنا آسف ولكن أنا لا أعرف روبي, يبدو أنك سيء كمية من المواضيع أو كنت التخزين المؤقت على أنها خاطئة.

حظا سعيدا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top