ضبط حد الذاكرة في Ruby؟

هل يمكن جعل ذلك خيارًا في إعدادات الموقع لتحديد مقدار الذاكرة التي يمكن استخدامها؟ حاليًا، تم ضبط الضبط على 2 جيجابايت (تعديل: آسف، أنا مخطئ، انظر أدناه) — بينما كان سابقًا 4 جيجابايت — ومع ذلك فإن إعدادات الأجهزة الموصى بها هي 1 جيجابايت + مساحة تبديل. يبدو لي أن عقدة بسعة 1 جيجابايت قد تدخل في حالة من الفوضى في التبديل إذا كان استخدام روبي قد وصل فعليًا إلى 2 جيجابايت.

من سجل الترقية:

Migrating default
Seeding default
*** Bundling assets. This will take a while *** 
$ RUBY_GC_MALLOC_LIMIT_MAX=20971520 RUBY_GC_OLDMALLOC_LIMIT_MAX=20971520 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=50000 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9  bundle exec rake assets:precompile
Purging temp files
Bundling assets
إعجاب واحد (1)

لست متأكدًا من مدى صلة هذه الإعدادات في Ruby الحديثة، لكن @sam هو الأكثر دراية بذلك.

إعجاب واحد (1)

آه، عذرًا، هذا ليس 2G، بل 20 ميجابايت. إذن الأمر لا يشبه الوضع الذي اعتقدتُ أنه عليه. (تعديل: الوضع أسوأ! انظر أدناه)

إعجاب واحد (1)

جرب 20 جيغا. :wink: :slightly_smiling_face:

إعجاب واحد (1)

يتمتع Discourse باستهلاك ذاكرة يمكن التنبؤ به، لذا فإن الإعداد الذي تريده هو عدد عمال Unicorn.

إذا كان لديك خادم بسعة 1 جيجابايت، فسنقوم افتراضيًا بتعيين 2 عامل، وهو ما يجب أن يعمل بشكل جيد مع هذا القليل من الذاكرة.

إعجابَين (2)

في الواقع، أثناء التشغيل كمنتدى. لكن هذا ليس كذلك!

أثناء الترقيات، تحدد بعض المهام متغيرات البيئة هذه لـ Ruby.

إعجاب واحد (1)

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

إعجابَين (2)

صحيح، وملاحظتي هي أن الحدود قد تكون مرتفعة جدًا في بعض الحالات، لذا أتساءل عما إذا كان يمكن جعلها قابلة للتكوين.

إعجابَين (2)

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

يمكنك قراءة الكود الذي جاء من هذا الالتزام:

إذا تمكّنت من إعادة إنتاج الفشل على قطرة من Digital Ocean، فسوف يسعدنا النظر في الأمر.

إذا كان ذلك ضروريًا، فيمكنك إنشاء نسخة من الإضافة (fork) وتعديلها وفقًا لاحتياجاتك.

4 إعجابات

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

إعجابَين (2)

هل يجب علينا استعادة ذلك الموضوع يا @sam؟ هل له قيمة تاريخية أم أنه عفا عليه الزمن؟

إعجاب واحد (1)

من المؤكد أنها قديمة؛ فأحدث إصدارات Ruby يحتوي على حدود متعددة لـ malloc. إنه موضوع مثير للاهتمام وله قيمة تاريخية، لكنه يحتاج إلى لافتة كبيرة تقول “قديمة” في الأعلى.

ترقيتنا تعمل بالفعل بأقصى قدر ممكن من الضيق، وأفضل ما يمكننا فعله فوق ذلك هو تقليل التوفر. إذا كانت الذاكرة مقيدة للغاية، فستضطر إلى تحمل فترات انقطاع عند الترقية.

5 إعجابات