PG::ConnectionBad يتسبب في توقف الموقع مؤقتاً

في سجلات الأخطاء، أتلقى أحيانًا الأخطاء التالية. يتسبب ذلك في عدم إمكانية الوصول إلى الموقع لمدة 15-30 ثانية حتى يعود.

رسالة خطأ Info:

PG::ConnectionBad (FATAL: the database system is in recovery mode) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize’

رسالة خطأ Env:


ملاحظة غريبة جدًا لاحظتها عند فحص هذه السجلات هي أنه يبدو أنه يبحث عن المجلد في /var/www/… لكن هذا المجلد غير موجود على الخادم. هل يجب أن يكون موجودًا؟ أي مساعدة موصى بها مُقدَّرة.

إذا كانت قاعدة البيانات تالفة، فإن الموقع سيكون تالفًا بالضرورة. يجب عليك معرفة السبب. الأسباب الأكثر شيوعًا هي نقص الذاكرة العشوائية (RAM) ومساحة القرص. تخميني هو أن المشكلة في الذاكرة العشوائية. كم ذاكرة عشوائية لديك؟ وما هو ناتج الأمر free -h؟

هذا هو المسار داخل الحاوية. إذا قمت بتشغيل الأمر ./launcher enter app، فسترى المجلد هناك.

أعتقد أنك محق. إليك مخرجات الأمر free -h.

image

لا يبدو لي أن 131 ميجابايت حرّة كمية كبيرة.

حسنًا، لديك 646 ميجابايت متاحة، و4 جيجابايت كافية لدرجة أن استخدام مساحة التبديل (swap) لا يُوصى به عادةً. ما حجم قاعدة بياناتك؟ ما مقدار حركة المرور لديك؟ هل هناك أي شيء آخر يعمل على الخادم غير Discourse؟

لا يوجد أي شيء يعمل على الخادم بخلاف discourse.

للحصول على الحجم، قمت بتشغيل:

./launcher enter app
rails db
SELECT pg_size_pretty(pg_database_size(current_database()));

كان الناتج النهائي 4650 ميجابايت (صف واحد).

أما بالنسبة لحركة المرور:
كان لدينا 1,200 مشاهدة للصفحة أمس، و12,400 في الأسبوع الماضي. حوالي 160 مستخدمًا في الأسبوع الماضي وحوالي 80 مستخدمًا متزامنًا في أي لحظة.

إذا كان لديك مساحة تخزين إضافية، أضف مساحة تبادلية (swap) لتمنح نفسك بعضًا من مساحة التنفس المؤقتة.

أضفت قرص تبديل بسعة 1 جيجابايت. سنرى ما سيحدث أثناء حركة المرور الكثيفة الليلة.

image

أنت رائع. يبدو أن مساحة التبديل البالغة 1 جيجابايت قد أوقفت جميع مشاكل التعطل. أنا حقًا سعيد لأن المشكلة كانت في ذاكرة الوصول العشوائي (RAM) وليس في قاعدة البيانات. سأقوم بزيادة كمية ذاكرة الوصول العشوائي على الخادم خلال عطلة نهاية الأسبوع. شكرًا جزيلاً للجميع الذين ساعدوا في هذا الموضوع!

بعد الانتهاء من ذلك، قم بتشغيل أمر discourse-setup مرة أخرى لإعادة تعيين معاملات الذاكرة.

أنا متسائل عما إذا كانت قد تم ضبطها بشكل صحيح من البداية. :man_shrugging:t2:

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

بعد تثبيت ملف التبادل (swap file)، كانت هناك أوقات يُستخدم فيها أكثر من 4 جيجابايت من “الذاكرة”، مما يشير إلى أن هذه كانت بالتأكيد المشكلة خلال أوقات الذروة، والتي تتزامن مع الفترات التي تعطل فيها الخادم. قمنا بالترقية اليوم، والآن يعمل الموقع بشكل ممتاز.

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

أعدت تشغيل دالة discourse-setup اليوم، حيث لم أكن على علم بذلك من قبل. كان الأمر جديدًا عليّ.