أخطاء 502 عند إعادة تسمية الفئات الكبيرة (حسب عدد المواضيع)

مرحبًا.
لقد نشرت أيضًا هنا: Moving posts returns 502 bad gateway - #63 by Canapin
لكن يبدو أن الخطأ يحدث في سياقات أخرى. لا يمكنني إعادة تسمية فئة:

وحسب وحدة التحكم في الجافا سكريبت:

نفس الشيء في وضع الأمان (لا أستخدم سمات أو إضافات مخصصة على أي حال، باستثناء data-explorer)، الإصدار 2.6.0.beta2
خوادمنا تعمل على نظام Ubuntu 18، وتحتوي على 4 معالجات افتراضية، وذاكرة وصول عشوائي سعتها 8 جيجابايت، ومساحة تخزين على القرص تبلغ 160 جيجابايت.

3 إعجابات

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

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

ربما 20-30 ثانية؟ أيضًا، لا يحدث هذا عند إعادة تسمية فئات أخرى. :thinking:

تعديل: يحدث أيضًا في منتدى التطوير الخاص بي (كمبيوتر قوي نسبيًا مع نظام فرعي لـ Ubuntu).

تعديل ثانٍ:

  1. يبدو أن التقسيم إلى دفعات أصغر يعمل. إذن، لا يحب Discourse نقل أكثر من 3000 موضوع، حتى مع وجود خادم أكثر قوة (قمت بزيادة السعة إلى 16 vCPU / 32 جيجابايت). لذا، أعتقد أن هذه المشكلة مختلفة عن إعادة تسمية فئاتي. لم أستطع حتى الآن إعادة تسمية الفئة.

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

هناك فئتان لا يمكنني إعادة تسميتهما (يبدو أنها تستغرق وقتًا طويلاً حقًا…):

أستطيع إعادة تسمية “رسائل الملف الشخصي العامة”، والتي تحتوي فقط على مواضيع بدون ردود.

30 ثانية هي مهلة الوقت المحددة في nginx، لذا فهذا منطقي. الأمر يحتاج ببساطة إلى وقت أطول من ذلك.
لو كنتُ مكانك، كنتُ سأجرب هذا من وحدة تحكم Rails.

ظننت أن القيام بذلك بهذه الطريقة، لكنني لم أكن متأكدًا من أنها آمنة: أتساءل لماذا يستغرق الأمر كل هذا الوقت لمجرد إعادة تسمية عنوان فئة في Discourse :thinking:
هل يحتاج إلى التحقق من أشياء لا أفكر فيها؟

يبدو ذلك :slight_smile:
أظن أنه قد يعيد حساب بعض الإحصائيات. ما يمكنك فعله هو الاتصال بقاعدة بيانات Postgres وتشغيل أمر مثل:

SELECT pid, age(query_start, clock_timestamp()), usename, query 
FROM pg_stat_activity 
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' 
ORDER BY query_start desc;

لمعرفة ما الذي يستغرق كل هذا الوقت.

شكرًا لك!
لكنني لست على دراية بذلك. هل يجب أن أشغل هذا الاستعلام بينما يحاول Discourse تغيير اسم الفئة؟

نعم، سيُظهر لك الاستعلامات قيد التشغيل حاليًا، لذا يُنصح بتشغيله أثناء الانتظار. لديك 30 ثانية :wink:

إعجابَين (2)

شغّلت الاستعلام قبل حوالي 10 ثوانٍ من محاولة تغيير اسم الفئة، وإليك ما يعيده:

لا أرى شيئًا غريبًا؟ :thinking:

أرى استعلامًا تافهًا جدًا (UPDATE categories...) يبدو أنه يستغرق بالفعل 13 ثانية…
ماذا يحدث إذا قمت بتشغيله يدويًا؟

تحرير: إذا كان هذا منتدى مستوردًا، فقد يساعد ذلك في عمل نسخة احتياطية ثم استعادته.

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

حاولت تغيير اسم الفئة عبر واجهة Discourse. ظهرت الخطأ الذي عرضته في منشوري الأول، وتم ملء ذاكرة الوصول العشوائي (RAM) الخاصة بي:
image

استعلامك يُظهر:

جربت التحديث من وحدة تحكم Rails،
جربت الأمرين التاليين:

ActiveRecord::Base.connection.execute("UPDATE categories SET name = 'General Discussion', topic_template = '', sort_order = '', default_view = '', read_only_banner = '', name_lower = 'general_discussion', updated_at = '2020-09-16 13:36:50.014192' WHERE categories.id = 21")
Category.where(id: 21).update(name: "General")

كلا الأمرين نجحا بشكل رائع.

هذا… مثير للاهتمام… :thinking:

تحديث: حاولت إعادة تسمية فئة في منتداي الآخر النشط (بيانات/خادم/نظام تشغيل مختلفة، لكن نفس إصدار Discourse).

تغيير اسم الفئة بطيء (حوالي 10 ثوانٍ). جربت ذلك عدة مرات وواجهت أيضًا خطأ 502 مرة واحدة.

أشعر بأن هذه مشكلة في Discourse ربما تتعلق بتحديث حديث؟ :thinking:
كلا المنتدىين يستخدمان الإصدار 2.6.0.beta2.

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

إعجابَين (2)

هل كان إعادة تسمية الفئات التي تحتوي على عدد كبير من المواضيع سريعًا بالنسبة لك في إصدار Discourse السابق؟

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

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

فقط تصحيح بخصوص هذا: أعتقد أنني قمت سابقًا بتشغيل Category.where(id: 21).update(name: "General") على فئة نقلت منها المواضيع أو ما شابه ذلك، لأنني اضطررت لاستخدام هذا الأمر عدة مرات على فئات مختلفة حاليًا، ويبدو أن مدة تنفيذ الأمر تتناسب طرديًا مع عدد المنشورات في الفئة المستهدفة.
إذًا، المشكلة هي نفسها عند تحديث الفئة من الواجهة، باستثناء أن الأمر لا يتوقف عن العمل (لا يحدث انتهاء للوقت) عند تنفيذه من سطر الأوامر.

استغرق الأمر ما يزيد قليلاً عن دقيقة لفئة تضم أكثر من 30000 موضوع، وأكثر من 30 ثانية لفئة تضم أكثر من 15000 موضوع، بينما كان سريعًا للفئات التي تحتوي على عدد قليل من المواضيع.

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

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

محاولة تغيير اسم فئة واحدة فقط تؤدي إلى ظهور خطأ 502 في كل مرة.

إعجابَين (2)

هل قمت بتعديل الإعدادات في ملف app.yml وفقًا لذلك؟

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

إعجابَين (2)

نعم!

هل يعني ذلك مجرد النظر إلى forumwebsite.com/logs؟ لا أرى أخطاءً تتعلق تحديدًا بإجراء إعادة تسمية الفئة.

أرى كثيرًا من الأمور في قسم المعلومات، ولكن مرة أخرى لا يوجد شيء محدد يتعلق بالإجراء.

هل يجب أن أحاول تصحيح أي أخطاء؟

إعجابَين (2)

يمكنك الاطلاع على /admin/logs (أو ما شابه ذلك) في واجهة الويب، وكذلك أمر مثل:

tail -f /var/discourse/shared/standalone/logs/rails/production.log

هذا من الذاكرة وتم كتابته باليدين، لذا أنصحك باستخدام إكمال تلقائي عبر زر Tab. :slight_smile:

4 إعجابات