فشل ترقية مثيل discourse إلى 15 فبراير 2022

لا يمكنني إعادة التشغيل الآن، سأبلغ عن النتائج بمجرد أن تتاح لي الفرصة. سيستغرق الأمر بضعة أيام على الأقل.

هل يجب أن أقلق؟ لا بأس إذا اضطررت إلى تخصيص المزيد من الموارد.

نعم، يجب أن تقلق.
بالكاد لديك أي مجال للمناورة ولا يوجد تقريبًا أي مجال لتخزين ذاكرة التخزين المؤقت للقرص أيضًا.

ولكن قبل تخصيص المزيد من الموارد، يجب عليك محاولة اكتشاف ما الذي يسبب هذا الاستخدام الاستثنائي للذاكرة.

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

لا أستطيع فعل الكثير الآن، أنا في طريقي. سأعود إلى العمل في نهاية هذا الأسبوع وسأحاول بالتأكيد معرفة ما يحدث. شكراً على التوجيه :+1:

3 إعجابات

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

root@discourse:~# free
               total        used        free      shared  buff/cache   available
Mem:         3927308      977624     2246208       42880      703476     2646836
Swap:        2097148           0     2097148
إعجابَين (2)

قد يكون من المفيد، إذا وجدت نفسك في موقف مماثل مرة أخرى، أن تسأل discourse عن العمليات التي تستخدم الذاكرة - المخرجات في
https://example.com/admin/upgrade#/processes
مرتبة حسب استخدام ذاكرة الوصول العشوائي. أعتقد أن هذا سيعرض فقط العمليات التي تعمل مع الحاوية. في سطر الأوامر، يمكنك استخدام

ps aux | sort -nr -k 4 | head -22

أو ما شابه، لرؤية استخدام جميع العمليات بما في ذلك تلك الموجودة في جميع الحاويات.

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

تعديل: حسنًا، أرى أنني أذكر قراءة العمليات وفقًا لاستخدام ذاكرة الوصول العشوائي (RSS). يمكن أن يكون ذلك مفيدًا، ولكن في هذه الحالة، نحن مهتمون بشكل أكبر باستخدام الذاكرة الافتراضية: يجب علينا فرزها حسب العمود VSZ، العمود 5، لذلك.

إعجابَين (2)

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

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

وجدت هذا الذي يناقش ما هو vm.overcommit_memory، ولكنه لا يجعلني أفهم سبب الحاجة إلى أي تغيير من هذا القبيل:

هذا يتعلق بتشغيل Redis، وليس بترقية Discourse.

أعتقد أن الأمر أكثر من ذلك - دعني أحاول الشرح. التوصية تأتي من redis، ويوصي بها redis لأن عملية الانقسام (forking) تتطلب الكثير من الذاكرة الافتراضية، وينقسم redis لإجراء عمليات حفظ في الخلفية، ومع ذلك فإن الذاكرة الافتراضية المطلوبة لن تكون مطلوبة أبدًا.

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

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

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

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

إذا كان إجمالي ذاكرة الوصول العشوائي (RAM) والتبديل (swap) لديك كبيرًا بما يكفي، فلن تحتاج أبدًا إلى تغيير هذا الإعداد. إذا لم يكن إجماليها كبيرًا، فقد يساعد تغييره.

إعجابَين (2)

سيخبرك الأمر free بمقدار مساحة المبادلة المكونة، ومقدار استخدامها. أعتقد أنك ستجد أنها قيد الاستخدام بمجرد تشغيل تلك الأوامر.

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

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

إعجابَين (2)

آها. أعتقد أنني فهمت ذلك نوعًا ما، ولكن هذا شرح جيد جدًا. لهذا السبب كنت أقوم بتعيين ذلك في كل تثبيت قمت به جهاز افتراضي قمت بإنشائه للعملاء.

أتساءل عما إذا كان ينبغي لنا تغيير discourse-setup لتغيير هذه الإعدادات عند إنشائه للمبادلة.

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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.