سؤال

بلدي RubyOnRails تعيين التطبيق مع المعتاد حزمة من النغول وراء اباتشي التكوين.لقد لاحظت أن لدينا هجين ملقم ويب استخدام الذاكرة يمكن أن تنمو كبيرة جدا على عمليات معينة و نود حقا أن تكون قادرة على حيوي هل رشيقة إعادة تشغيل مختارة الهجين العمليات في أي وقت.

ومع ذلك, لأسباب لن ندخل هنا في بعض الأحيان يمكن أن يكون جدا المهم أن لا يقطع الهجين في حين أنه هو خدمة الطلب ، لذا أفترض عملية بسيطة القتل ليس الحل.

من الناحية المثالية, أريد أن وإرسال الهجين إشارة إلى أن يقول "النهاية مهما كنت تفعل ثم استقال قبل قبول أي مزيد من الاتصالات".

هل هناك معيار تقنية أو أفضل الممارسات من أجل هذا ؟

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

المحلول

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

يمكنك ان ترى هذا العمل من إخراج سجل تحصل عندما قتل الهجين في حين انها معالجة الطلب.على سبيل المثال:

** TERM signal received.
Thu Aug 28 00:52:35 +0000 2008: Reaping 2 threads for slow workers because of 'shutdown'
Waiting for 2 requests to finish, could take 60 seconds.Thu Aug 28 00:52:41 +0000 2008: Reaping 2 threads for slow workers because of 'shutdown'
Waiting for 2 requests to finish, could take 60 seconds.Thu Aug 28 00:52:43 +0000 2008 (13051) Rendering layoutfalsecontent_typetext/htmlactionindex within layouts/application

نصائح أخرى

ننظر في استخدام monit.يمكنك حيوي إعادة تشغيل الهجين على أساس الذاكرة أو وحدة المعالجة المركزية.هنا سطر من ملف التكوين التي كتبت عن عميل من الألغام.

check process mongrel-8000 with pidfile /var/www/apps/fooapp/current/tmp/pids/mongrel.8000.pid
    start program = "/usr/local/bin/mongrel_rails cluster::start --only 8000"
    stop program = "/usr/local/bin/mongrel_rails cluster::stop --only 8000"

    if totalmem is greater than 150.0 MB for 5 cycles then restart       # eating up memory?
    if cpu is greater than 50% for 8 cycles then alert                  # send an email to admin
    if cpu is greater than 80% for 5 cycles then restart                # hung process?
    if loadavg(5min) greater than 10 for 3 cycles then restart          # bad, bad, bad
    if 3 restarts within 5 cycles then timeout                         # something is wrong, call the sys-admin

    if failed host 192.168.106.53 port 8000 protocol http request /monit_stub
        with timeout 10 seconds
        then restart
    group mongrel

كنت ثم كرر هذا التكوين من الهجين مثيلات نظام مجموعة.على monit_stub الخط هو فقط ملف فارغ أن monit يحاول تحميل.إذا لم يستطع فإنه يحاول إعادة تشغيل المثيل كذلك.

ملاحظة:على رصد الموارد لا يبدو أن العمل على OS X مع داروين النواة.

السؤال هو كيفية الحفاظ على التطبيق الخاص بك من تستهلك الكثير من الذاكرة أنه يتطلب منك إعادة تشغيل النغول من وقت لآخر.

www.modrails.com تخفيض لدينا الذاكرة بشكل كبير

انتفاخي:

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

لذلك لدي 3 مهام:كاب:نشر - الذي يقوم التقليدية إعادة تشغيل كل شيء في نفس الوقت الأسلوب مع ربط ذلك يضع الصيانة الصفحة ثم يأخذ عليه بعد HTTP الاختيار.كاب:نشر:المتداول الذي يفعل ذلك تتالي عبر آلة (أنا سحب من iClassify أن تعرف كيف العديد من النغول على إعطاء الجهاز) بدون صيانة الصفحة.غطاء نشر:الهجرات التي لا الصيانة صفحة + الهجرات منذ عادة فكرة سيئة لتشغيل الهجرات 'يعيش'.

حاول استخدام:

mongrel_cluster_ctl stop

يمكنك أيضا استخدام:

mongrel_cluster_ctl restart

لدي سؤال

ماذا يحدث عندما /البيرة/المحلية/بن/mongrel_rails العنقودية::ابدأ --فقط 8000 يتم تشغيل ?

جميع الطلبات تقدم من خلال هذه العملية خاصة إلى النهاية ؟ أم أنها أجهضت ?

أنا الغريب إذا هذا كله بدء/إعادة تشغيل شيء يمكن القيام به دون التأثير على المستخدمين النهائيين...

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