ذاكرة Redis تستمر في الزيادة في Discourse 3.4.0.beta3

لقد قمت مؤخرًا بتحديث Discourse من الإصدار 3.4.0.beta1 إلى 3.4.0.beta3. بعد التحديث، لاحظنا أن استخدام ذاكرة المنتدى يتزايد تدريجيًا، مما يتسبب في تعطل التطبيق. عند التحقق من الخادم، يمكننا رؤية أن redis-server يستهلك 95٪ من الذاكرة.

نقوم بتشغيل redis-cli flushall يوميًا لحل المشكلة مؤقتًا. يتم استضافة مثيل Discourse في Docker.

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

إعجابَين (2)

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

لا أعرف كيفية إصلاح Redis، لكنني قرأت شيئًا مشابهًا في وقت ما. قد يساعد البحث.\n\nلكن التراجع هو في الغالب فكرة سيئة.\n\nDowngrade to stable?

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

لا يمكنك الرجوع بإصدار Discourse.
لا يستخدم Redis 95% من الذاكرة بل 38.9%. لا يزال الكثير.

كيف تبدو طوابير Sidekiq لديك؟ /sidekiq/queues

يرجى العثور على تفاصيل /sidekiq/queues

أخبرني إذا كنت بحاجة إلى أي تفاصيل أخرى

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

هل هذه رسائل بريد إلكتروني لوظائف بالصدفة؟

إعجابَين (2)

أشك في ذلك. كيف يمكنني التحقق من ذلك؟

انقر على قائمة الانتظار

هل يمكنني معرفة ما إذا كنت تتحدث عن قسم قوائم الانتظار هذا؟

شيء آخر هو أنه ضمن /sidekiq/scheduler/history يمكنني العثور على Jobs::Chat::EmailNotifications لا تزال قيد التشغيل لفترة طويلة

نعم، فقط انقر على كلمة “منخفض”

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

يرجى العثور على التفاصيل أدناه

هناك مشكلة مماثلة هنا:

مع ربما إصلاح:

نظرًا لأنك لست الوحيد الذي يواجه هذا، يبدو أن هذا خطأ. :thinking:

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

كحل مؤقت، قمت بإنشاء نص برمجي صغير بلغة bash لتنظيف ذاكرة Redis وتعيينه للتشغيل كل يوم في الساعة 6 صباحًا باستخدام مهمة cron.
ملاحظة: أقوم بحفظ السجل في /home/ubuntu/logs. يمكنك تجاهله إذا لم تكن بحاجة إليه.

#!/bin/bash

# تعيين دليل السجل واسم الملف
LOG_DIR="/home/ubuntu/logs"
LOG_FILE="$LOG_DIR/redis.cleanup.$(date +\%Y-\%m-\%d).log"

# التأكد من وجود دليل السجل
mkdir -p "$LOG_DIR"

# تسجيل معلومات حول البيئة الحالية (جانب المضيف)
echo "Running script at $(date)" >> "$LOG_FILE"

# تشغيل مشغل discourse في التطبيق وحفظ المخرجات في ملف السجل (جانب المضيف)
echo "redis cleanup command" >> "$LOG_FILE"
docker exec app redis-cli flushall >> "$LOG_FILE" 2>&1

# الإشارة إلى أن النص البرمجي قد اكتمل بنجاح (جانب المضيف) والخروج
echo "Script completed successfully at $(date)" >> "$LOG_FILE"
exit 0
إعجابَين (2)

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

إعجابَين (2)

تحديث: لقد أوقفت التطبيق وأعدت تشغيله، بدأت أواجه نفس المشكلة :slightly_smiling_face:

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

122 مليون مهمة في قائمة الانتظار تظهر بالتأكيد أن هناك خطأ ما :thinking:
كم عدد المستخدمين لديك في Discourse؟
كم عدد قنوات chat الموجودة؟
كم عدد المستخدمين في أكبر 3 قنوات chat لديك؟

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

3,4 مجموعات دردشة تضم أكثر من 2 لكح عضو

لست على دراية بكلمة “لك” (lakh) ولكن جوجل يقول إنها 100,000 :open_mouth: هل هذا صحيح؟

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

نعم، العدد الدقيق هو 227,254 عضوًا في مجموعة واحدة. لدينا أعضاء مشابهون في مجموعتين أو ثلاث مجموعات أخرى.

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