أقوم بإعادة بناء الصورة على قطرة Digital Ocean وشيء ما يستغرق وقتًا طويلاً:
I, [2024-01-10T09:47:14.854311 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile'
Node.js heap_size_limit (492.75) is less than 2048MB. Setting --max-old-space-size=2048.
[WARN] (broccoli-terser-sourcemap) Minifying "assets/admin.js" took: 25461ms (more than 20,000ms)
[WARN] (broccoli-terser-sourcemap) Minifying "assets/plugins/chat.js" took: 47818ms (more than 20,000ms)
Purging temp files
Bundling assets
I, [2024-01-10T10:06:07.644096 #3264] INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
القطرة لديها 1 جيجابايت من ذاكرة الوصول العشوائي وبخلاف ذلك تعمل Discourse بشكل جيد. هل أفعل شيئًا خاطئًا؟ هل يمكنني فعل شيء لتسريع إعادة البناء؟ شكرا لك!
لقد وصل الأمر إلى النقطة التي أوصي فيها بحد أدنى 4 جيجابايت لمثيل Discourse (بالإضافة إلى مساحة التبديل!) (حتى مع 2 جيجابايت + 2 جيجابايت من مساحة التبديل أجد التحديثات عبر الإنترنت بطيئة بشكل مؤلم).
شكرا لك! للأسف هذا حوالي أربعة أضعاف السعر لتحسين قد أشعر به فقط أثناء التحديثات. أيضًا، لا يزال دليل التثبيت السحابي يقول:
الافتراضي لـ 1 جيجابايت من ذاكرة الوصول العشوائي يعمل بشكل جيد لمجتمعات Discourse الصغيرة. نوصي بـ 2 جيجابايت من ذاكرة الوصول العشوائي للمجتمعات الأكبر.
هل نعرف من أين يأتي ضغط الذاكرة في هذه الخطوة؟ ربما يكون من الممكن مقايضة نسبة ضغط أسوأ أو شيء ما مقابل متطلبات ذاكرة أقل؟
أعتقد أنه بالنسبة لتحديثي التالي على خادمي، سأستخدم مرونة مزود الاستضافة للانتقال إلى ذاكرة وصول عشوائي أكبر قبل التحديث، والعودة إلى الحد الأدنى الحالي فورًا بعد ذلك. هناك قدر ضئيل من وقت التوقف الإضافي، ولكن إذا كان إعادة البناء أسرع بكثير، فقد يكون ذلك فوزًا إجماليًا. يجب أن تكون النفقات الإضافية أقل من دولار واحد أو ربما سنت واحد فقط، مقابل ساعة إضافية من ذاكرة الوصول العشوائي (في حالتي، من 6 دولارات شهريًا إلى 12 دولارًا شهريًا، يتم شحنها بالساعة على Digital Ocean بسنت واحد وسنتين على التوالي).
كما هو مذكور في الموضوع المرتبط، فإن إعادة التشغيل مفيدة في بعض الأحيان على أي حال، لذا فهي وقت جيد لتحديث حزم نظام التشغيل وإعادة التشغيل، بالنسبة لي.
آمل أن يؤدي هذا إلى تآكل وتلف أقل لي أيضًا.
قد أختار في الواقع الانتقال من 1 جيجابايت إلى 8 جيجابايت، مما سيكلف 6 سنتات إضافية لكل ساعة، لمنحي حرية حذف ملف التبديل الخاص بي مؤقتًا، وتخفيف أزمة مساحة القرص.
كل شيء يصل إلى ذروته في وقت التحديث - بين الأوقات، يبدو التكوين الأدنى الحالي كافيًا.
حسنًا، لكن لا يزال في مكانه. هذا خيار رائع، ولكنه يتطلب جهدًا إضافيًا ووقت تعطل.
بالنظر إلى أن وقت إعادة البناء على جهاز بسعة 1 جيجابايت يستغرق وقتًا طويلاً، فقد يكون من الأفضل القيام بذلك، لأنه سيكون معطلاً لمدة 30 دقيقة على أي حال!
وبالتأكيد، إذا كنت مستعدًا للقيام بذلك، فحتى ترقية جهاز بسعة 16 جيجابايت مؤقتًا قد تكون مناسبة من حيث التكلفة
أعتقد أن الكثيرين سيقدرون وقتهم أكثر ويجب عليهم البدء في التفكير في 4 جيجابايت + بشكل دائم.
بالتأكيد هو جزء من مقايضة بين التكلفة والوقت. بالنسبة لي، لقد التزمت بالفعل بقضاء ساعة في رعاية الأطفال للترقيات، وأنا أعرف تمامًا كيفية القيام برقصة مسؤول النظام هذه، لذا فقد تم حجز الوقت بالفعل. أفضل الحفاظ على تكلفة التشغيل الشهرية بأقل قدر ممكن، حتى لو استغرق الأمر بعض الوقت - سيكون لدى الآخرين مقايضات مختلفة.
بالتأكيد، إذا كان إنفاق المال سهلاً، فاحصل على مثيل كبير ومريح!
للمرجع فقط، لقد قمت للتو بتحديث منتدياتي، وكلاهما تم في غضون ساعة واحدة، وفي كلتا الحالتين قمت مؤقتًا بتغيير الحجم إلى 8 جيجابايت من ذاكرة الوصول العشوائي ثم عدت مرة أخرى. استغرقت هذه الخطوة المحددة حوالي 5 دقائق، مع (مؤقتًا) 4 وحدات معالجة مركزية و 8 جيجابايت من ذاكرة الوصول العشوائي.
I, [2024-01-10T16:07:58.323464 #1] INFO -- : cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
110:M 10 Jan 2024 16:08:52.047 * 100 changes in 300 seconds. Saving...
110:M 10 Jan 2024 16:08:52.048 * Background saving started by pid 3276
3276:C 10 Jan 2024 16:08:52.384 * DB saved on disk
3276:C 10 Jan 2024 16:08:52.386 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
110:M 10 Jan 2024 16:08:52.449 * Background saving terminated with success
Purging temp files
Bundling assets
MaxMind IP database updates require a license
Please set DISCOURSE_MAXMIND_LICENSE_KEY to one you generated at https://www.maxmind.com
MaxMind IP database updates require a license
Please set DISCOURSE_MAXMIND_LICENSE_KEY to one you generated at https://www.maxmind.com
I, [2024-01-10T16:12:14.362017 #3300] INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
هنا نرى أن ember (العمود 12) يستخدم 2.5 جيجابايت من ذاكرة الوصول العشوائي (العمود 6) وأكثر من وحدة معالجة مركزية واحدة (العمود 3)
ربما كان 4 جيجابايت من ذاكرة الوصول العشوائي كافية بالنسبة لي، ولكن كما هو مذكور، فإن كل هذا لم يكلف سوى بضعة سنتات. (أرى الآن أنه كان بإمكاني اختيار وحدات معالجة مركزية أسرع مقابل سنت إضافي.)
تعديل: أخذت نسخة احتياطية قبل أن أبدأ وأخرى بعد الانتهاء من المهمة، وكانت تفصل بينهما 35 دقيقة. لذا لم يكن وقت التعطل كما رآه المستخدمون أطول من ذلك.
تعديل: لاحظ أن لوحة تحكم Digital Ocean تقول إن عملية تغيير الحجم قد تستغرق دقيقة واحدة لكل جيجابايت من البيانات على القرص - في حالتي 14 جيجابايت فقط، وكما تبين، دقيقتان فقط لكل تغيير حجم. ولكن إذا كان لديك قدر كبير من البيانات على المثيل، فقد تستغرق هذه الرقصة لتغيير الحجم وقتًا أطول. (ثم مرة أخرى، إذا كان لديك قدر كبير من البيانات، فربما لا تحاول تشغيلها في أقل من 4 جيجابايت من ذاكرة الوصول العشوائي).
لا تزال ذاكرة الوصول العشوائي (RAM) بسعة 4 جيجابايت غير كافية في بعض الحالات. على سبيل المثال، لدي مساحة رملية بذاكرة وصول عشوائي (RAM) بسعة 8 جيجابايت مع حركة مرور قليلة جدًا ولكنها إعداد متعدد المواقع للسماح بوجود 5 مساحات رملية يمكن التخلص منها. فشل إعادة البناء اليوم بسبب الخطأ 137 (OOM) وقد جربت الحيلة التي اقترحها @richard أعلاه. ومع ذلك، لتوفير عناء القيام بذلك في كل مرة، قمت بإنشاء مساحة مبادلة أكبر (4 جيجابايت) والتي يبدو أنها سمحت بإعادة البناء في الوقت الحالي. يبدو أننا نقوم فقط بترقية الخوادم في العام الماضي لأن عمليات إعادة بناء discourse تستهلك ذاكرة وصول عشوائي (RAM) بشكل كبير لسبب ما.
بالتفكير في هذا، فإن الفائدة تقتصر حقًا على عمليات إعادة البناء الكاملة - لا يمكنني حاليًا استخدام الترقيات عبر الإنترنت في تكوين 2+2 … ولا أعتقد أنني سأقوم برقصة الترقية/الخفض هذه لمجرد تحديث مكون إضافي واحد على سبيل المثال …
أشعر شخصيًا أن الترقية الدائمة إلى 4 جيجابايت على الأقل هي الطريقة الوحيدة …
ملاحظة: أنا لا أتذمر حقًا بشأن الاضطرار إلى مواكبة العصر … ولكن ربما يجب أن نبدأ في عكس الواقع في الوثائق والنصائح للمسؤولين؟
إنه للأسف يجعل Discourse أقل سهولة قليلاً للأشخاص الجدد، وخاصة الشباب
أنا بالفعل مع هذه الفكرة: احتفظ بالحد الأدنى الحالي للتكوين الموصى به كهدف وابحث عن تعديلات في الكود أو تغييرات في المصدر للحفاظ على الأمور تحت السيطرة. إنه تغيير كبير في العرض إذا كان الحد الأدنى للتكوين الآن ضعف السعر. ولهذا السبب أشرت في مكان آخر إلى أن متطلبات الذاكرة المفرطة هي خطأ.
بالتأكيد، هذا خطأ نفاد الذاكرة. إذا كانت لديك مساحة قرص كافية لإضافة مساحة تبديل (swap)، فسيكون ذلك كافيًا، على الرغم من أن العملية ستستغرق وقتًا أطول مما لو أضفت ذاكرة وصول عشوائي (RAM). قد يوفر لك مزود الاستضافة الخاص بك فرصة لترقية ذاكرة الوصول العشوائي مؤقتًا ثم التراجع عنها، مما سيكلفك على الأرجح بضع عمليات إعادة تشغيل، وقليل من وقت التوقف، وبضعة سنتات من التكلفة الإضافية.
تعديل: للتوضيح، الذاكرة = ذاكرة الوصول العشوائي (RAM) + مساحة التبديل (swap). ذاكرة الوصول العشوائي سريعة ومساحة التبديل رخيصة.