ارتفاع مفاجئ في استخدام الذاكرة لا ينخفض

قبل أكثر من أسبوع بقليل، نظرت إلى رسم بياني لـ DO الخاص بالذاكرة، وكنت مندهشًا جدًا:

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

ما الذي يسبب هذا؟ يخبرني الأمران top وps أن الجناة الرئيسيين هم عمليات postgres. وفيما يلي المعلومات من free:

$ free -mh
              total        used        free      shared  buff/cache   available
Mem:          7.8Gi       2.5Gi       142Mi       2.3Gi       5.1Gi       2.6Gi

لا أستطيع حتى الوصول إلى droplet عبر وحدة تحكم DO. إنه ينهار بسبب نفاد الذاكرة (OOM). لحسن الحظ، قمت بتثبيت مفاتيح SSH وأستطيع الوصول من حاسوب محمول شخصي، لذا لا يزال بإمكاني في هذه اللحظة الوصول إلى الـ droplet.

ماذا يجب أن أفعل؟ أنا أعمل بميزانية محدودة، لذا فإن تغيير حجم الـ droplet هو آخر خيار، وأتساءل عما إذا كان هناك أي شيء آخر. يبدو الأمر وكأنه حدث فجأة من العدم. أنا أشغل الإصدار 2.7.0.beta5.

ما الذي تغير مؤخرًا، إن وجد؟ هل قمت بالترقية؟

القفزة الرأسية الوحيدة في رسوماتي البيانية خلال الـ14 يومًا الماضية كانت أيضًا في 11 مايو، لكنها كانت أقل حدة حيث ارتفعت من 78% إلى 89%. ربما قمنا بالترقية آنذاك؟

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


أليس لديك مساحة تبديل (swap)؟

لا، لقد كنت أعمل على الإصدار 2.7beta5 منذ فترة. لم نقم بأي تغييرات منذ فترة.

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

ما الذي قد يسبب ذلك على المضيف؟

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

مساحة التبديل هي ما تم توفيره افتراضيًا، لست متأكدًا.

:thinking: وماذا يقول /sidekiq؟

إذا أضفت مساحة تبادل (swap)، ستتجنب حالات نفاد الذاكرة (OOMs). لا ترغب في حدوث حالات نفاد الذاكرة، ولا ترغب في نشاط كبير في التبادل (paging)، وإلا فقد يكون أو لا يكون ارتفاع استهلاك الذاكرة أمرًا مهمًا. (قد يكون ذلك مثيرًا للاهتمام، لكن هذا أمر مختلف.)

أنصحك بتشغيل الأمر:
vmstat 5 5
أو ما شابه ذلك لمعرفة كيف يبدو نشاط التبادل.

أيضًا،
free -h
أكثر فائدة من
free -mh
لأنه من المهم معرفة مقدار مساحة التبادل المتبقية لديك.