أخطاء نفاد الذاكرة مع إضافة مخصصة

هل يمكن لأحد تقديم إرشادات حول كيفية تكوين تخصيص الذاكرة؟

نظرًا لظهور رسائل نواة متقطعة تشير إلى “نفاد الذاكرة” أو عمليات تصريف الذاكرة، وزيادة التبديل ثلاث مرات، وتدهور استجابة التطبيقات بشكل متزايد، يبدو أن تطبيقنا ينفد من الذاكرة في بعض الأحيان. يحتوي نظامنا حاليًا على 8 جيجابايت من الذاكرة و2 جيجابايت من مساحة التبديل. التفاصيل أدناه.

لقد راجعت التعليمات الخاصة بإضافة ذاكرة فيزيائية ومساحة تبديل إضافية في ("Cannot allocate memory" when upgrading)، لكنني لم أستطع العثور على تفاصيل حول كيفية تخصيصها.

عندما يتعلق الأمر بتكوينات الذاكرة، فإننا نستخدم جميع الإعدادات الافتراضية. يتعافى النظام بعد بضع دقائق، لكن مع زيادة الاستخدام - نعتقد أنه حان الوقت للتعرف على كيفية تحسين الأداء. غير أنني غير متأكد من مكان وكيفية تكوين ذلك. هل يجب زيادة الذاكرة المخصصة لحالة Docker، أو لعدد عمليات Ruby Unicorn (أو كلاهما)؟

أنا مسؤول نظام بدون خبرة في Ruby وخبرة محدودة في Docker، لذا فإن توجيهي إلى ملف التكوين والصيغة المستخدمة سيساعد بشكل كبير.

Discourse 2.6.0 beta2
Ruby 2.3.1-2~ubuntu16.04.14
Ubuntu 16.04

كم عدد وحدات يونيكورن التي تشغلها؟ يتم تعيين ذلك في ملف /var/discourse/containers/app.yml.

مرحبًا رافائيل - في قسم “env” من ملف app.yml، أرى أننا مُهيأون لاستخدام 4.

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

هل قمت بتشغيل discourse-setup مرة أخرى بعد زيادة ذاكرة الوصول العشوائي (RAM)؟ سيقوم بتعديل إعدادات الذاكرة وفقًا لذلك. يمكنك أيضًا قراءة التعليقات في app.yml وتعديلها.

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

الحصول على OoM مع 4 unicorns فقط أمر غريب حقًا. يجب أن يستهلك هذا حوالي 2 جيجابايت، مما يترك 6 جيجابايت لـ PG و Redis.

يجب عليك التحقيق في العملية التي تستهلك كل الذاكرة أثناء حدث OoM، فهذا ليس أمرًا طبيعيًا.

3 إعجابات

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

لإضافة تفاصيل إلى الوصف: تم إنشاء الخادم في الأصل بذاكرة عشوائية (RAM) سعتها 8 جيجابايت ومساحة تبديل (swap) سعتها 2 جيجابايت. لم نقم بترقية الخادم منذ ذلك الحين.

في سجل النظام، أرى أدلة على أن عملية روبي (Ruby) هي التي تستهلك كل الذاكرة وتسبب نفاد ذاكرة النواة (Kernel OoM):

Killed process 2960 (ruby) total-vm:10031472kB, anon-rss:7438148kB, file-rss:0kB

لست خبيرًا في روبي، لذا لست متأكدًا من كيفية معرفة العملية داخل روبي التي تستهلك كل هذه الذاكرة.

نقدر أي اقتراحات منكم.

شكرًا لكم.

-سيرج

هل تقوم بتشغيل أي إضافات في تثبيت Discourse هذا؟

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

هل يمكنك وضع رابط مستودع الكود المصدري لهذه الإضافة هنا؟

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

مرحبًا رفائيل،

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

حظًا موفقًا!

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

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

هل تعمل النسخ الأخرى أيضًا على Ruby 2.3.1-2~ubuntu16.04.14؟

ربما لا شيء ذي صلة، ولكن:

لذا كان هذا بوضوح خطأً في Ruby. قمنا باختبار الإصدارات المختلفة من Ruby ووجدنا أن الإصدارات 2.3.x و 2.4.x فقط هي التي تظهر تسربًا للذاكرة (يبدو أن هذا تم إصلاحه في Ruby 2.5.0****).

وتطلب ملف readme الخاص بـ discourse وجود [Ruby 2.6+] :roll_eyes:

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

شكرًا لك! سأشارك تحديثًا عندما يهدأ الوضع.

مرحبًا بنيامين، تعمل النسخ الأخرى أيضًا بإصدار Ruby 2.3.1-2~ubuntu16.04.14، سأختبر تحديثًا لأرى ما إذا كان لن يكسر إعدادات Docker لدينا.

إصدار Ruby غير ذي صلة هنا

طالما أنك تستخدم صورة Docker الرسمية الخاصة بنا، فستستخدم الإصدار المدعوم الصحيح من Discourse

إعجابَين (2)

تم إغلاق هذا الموضوع تلقائيًا بعد 26 ساعة. لم يعد السماح بردود جديدة.