Tuning a Discourse server for performance

Are there any guides (or Topics here on the forum) that provide tips on tuning a server that hosts Discourse sites for performance?

I ran the ./Discourse-set and it set a quarter of the ram (to 4096mb) and added 8 unicorns workers - but is there anything else we can do, or tweak these?

The server has 64GB ECC Ram and two 512GB NVMe SSDs (in a raid array). Looking at top, only around 5GB of memory us being used, with 57392484 avail Mem. It does run other non-Docker sites, but they don’t use up much of the resources and MySQL is already tuned for a large 2GB db. Load averages are generally below 1.0 (usually around 0.50 up to 1.0 with occasionally going over). No problems have been reported, but I am hoping to utilise as much of the server as possible.

I’m wondering whether to start by doubling db_shared_buffers… and what about #db_work_mem: "40MB" which is currently commented out.

All info/tips appreciated :smiley:

3 إعجابات

لقد كنت أبحث أيضًا في المنتديات عن هذا.

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

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

شكرًا لك! لا توجد مشاكل حتى الآن. لاحظت فقط استخدامًا عاليًا للذاكرة ولكن ليس منتدى مزدحمًا. أنا معتاد على التفكير بشكل استباقي والتحقق من الموارد الأكثر استخدامًا. هذا فقط على خادم افتراضي خاص (VPS) بسعة 3 جيجابايت و 6 أنوية بسرعة 3.5 جيجاهرتز. ليس بطيئًا، بل سريع جدًا، ولكني أرى أن استخدام الذاكرة قد يصبح مشكلة في المستقبل وأنا فضولي بشأن ما يمكنني تعديله.

سأقوم بقراءة المزيد عن تطبيقات Ruby on Rails العامة وتحسينها. شكرًا مرة أخرى.

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

اعتمادًا على مقياس “الاستخدام” الذي تقصده، قد يكون ذلك طبيعيًا. ولكن مع 3 جيجابايت، ربما لا يكون هناك الكثير من الضبط للقيام به، كما لو كنت قد شغلت ./discourse-setup فإن تخميناته جيدة بما فيه الكفاية على الأرجح.

إعجاب واحد (1)
free -h
              total        used        free      shared  buff/cache   available
Mem:          2.9Gi       1.8Gi       167Mi       100Mi       1.0Gi       895Mi
Swap:         1.0Gi       587Mi       436Mi

المتاح حوالي 900 ميجابايت. ليست مشكلة بعد. لكن مشكلة لم تقودني إلى هنا. أود أن أعرف ما يجب فعله إذا/عندما تصبح الذاكرة المتاحة مشكلة في المستقبل. بخلاف إضافة المزيد من الذاكرة بالطبع.

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

إذا قمت بتشغيل ./discourse-setup، فسيؤدي ذلك إلى إنشاء ملف تبديل (swapfile) بحجم 2 جيجابايت. قد تواجه مشكلات عند إجراء إعادة بناء.

حسنًا، تمكنت من مضاعفة استخدام الذاكرة المتاحة تقريبًا عن طريق تغيير الإعداد الافتراضي للتثبيت من:
UNICORN_WORKERS: 8
إلى
UNICORN_WORKERS: 4

ثم: sudo ./launcher rebuild app

أنا الآن أقوم بإعداد مراقبة PostgreSQL وسأرى ما يجري هناك.

هناك دائمًا نقطة زمنية يصبح فيها مورد ما عنق زجاجة. لكن خادمك يبدو حاليًا مفرطًا في الأبعاد بالنسبة لي.

ستستخدم المزيد من الذاكرة عندما يكون لديك المزيد من عمليات Unicorn.
ستحتاج إلى المزيد من عمليات Unicorn عندما يكون لديك المزيد من حركة المرور على موقعك.

أرى أن جميع عمليات Unicorn تستخدم 0.0٪ من وحدة المعالجة المركزية ويبدو أن worker[0] هو الوحيد الذي يقوم بشيء ما بالفعل.

لقد قللت الذاكرة عن طريق تشغيل عدد أقل من Unicorns. هذا جيد، لأنك لم تكن تستخدمها على ما يبدو على أي حال. لكن الذاكرة المتاحة هي في الواقع شيء سيء. أنت تحسن لمتغير خاطئ.

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

**) إعادة بناء Discourse سيستهلك المزيد من الذاكرة لذلك تحتاج إلى التحقق من مقدار الذاكرة المتاحة * أثناء إعادة البناء. في الممارسة العملية، لا تقل عن 2 جيجابايت الإجمالية و/أو تأكد من أن لديك مساحة مبادلة كافية كما قال Pfaffman بالفعل. *

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

غير صحيح. الذاكرة “الحرة” التي لا تفعل شيئًا هي سيئة. لكن الذاكرة “المتاحة” هي الذاكرة التي يستخدمها النظام والتي يمكن تحريرها بسهولة هي شيء جيد. :slight_smile:

أو رسميًا:

الذاكرة المتاحة: تقدير لمقدار الذاكرة المتاحة لبدء تطبيقات جديدة، دون الحاجة إلى التبديل.

المصدر: man free

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

… نعم، أفضل تحرير الذاكرة إذا لم تكن قيد الاستخدام حتى يتطلب المرور أي تغييرات.

شكراً مرة أخرى.

أعتقد أن سيئة تعني هنا أنها تكلف، لكنها لا تعطي شيئًا. هذه طريقة شائعة جدًا للتفكير، لأنه عندما يحتاج المرء إلى المزيد من الموارد، فسيكون ذلك أكثر تكلفة أيضًا - والذاكرة العشوائية (RAM) جزء مكلف في تلك المعادلة.

وإذا لم يكن لديك الكثير من المال لإهداره، فمن الغباء دفع الكثير (تعبير إعلاني فنلندي، لا إساءة :rofl: )

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

نعم بالضبط، فيما يتعلق بالذاكرة المتاحة. ومع ذلك، فإن “الذاكرة المتاحة هي في الواقع شيء سيء” … هو ما كنت أعالجه بالفعل. :slight_smile: