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:

Я тоже искал это на форумах.

Существует (или существовало) несколько тем, посвященных настройке. Большинство успешных из них, на мой взгляд (за исключением этой), содержат подробную информацию о доступных ресурсах, параметре db_shared_buffers и других настройках, а также о возникающих проблемах, возможно, с выводами утилит htop или других инструментов. Каков размер вашей базы данных? С какой проблемой вы столкнулись? (Возможно, вам стоит создать новую тему).

Спасибо! Пока проблем нет. Просто заметил высокое потребление памяти, хотя форум не слишком активный. Я просто привык мыслить на опережение и проверять, какие ресурсы используются интенсивнее всего. Это всего лишь VPS с 3 ГБ ОЗУ и 6 ядрами @ 3,5 ГГц. Не медленно, а очень быстро, но видно, что потребление памяти может стать проблемой в будущем, и мне интересно, что можно оптимизировать.

Почитаю ещё немного о приложениях на Ruby on Rails в целом и об оптимизации. Спасибо ещё раз.

В зависимости от того, что именно вы подразумеваете под «потреблением», это может быть нормально. Но при 3 ГБ, вероятно, нет смысла настраивать параметры, так как, если вы запускали ./discourse-setup, его предположения, скорее всего, вполне достаточны.

              total        used        free      shared  buff/cache   available
Mem:          2.9Gi       1.8Gi       167Mi       100Mi       1.0Gi       895Mi
Swap:         1.0Gi       587Mi       436Mi

Доступно примерно 900 МБ. Пока это не проблема. Но проблема привела меня сюда. Хотелось бы узнать, что делать, если/когда доступная память станет проблемой в будущем. Конечно, кроме добавления ещё памяти.

На этом уровне единственное реальное решение — добавить больше оперативной памяти. Если у вас 8 или 16 ГБ, есть несколько вариантов действий. Возможно, стоит увеличить файл подкачки ещё на 1 ГБ, но, скорее всего, проблем не возникнет.

Если вы запускали ./discourse-setup, он создал файл подкачки размером 2 ГБ. При пересборке могут возникнуть проблемы.

Хорошо, мне удалось почти вдвое увеличить доступное использование памяти, изменив значение по умолчанию при установке с:
UNICORN_WORKERS: 8
на
UNICORN_WORKERS: 4

Затем выполнил: sudo ./launcher rebuild app

Сейчас настраиваю мониторинг PostgreSQL, чтобы понять, что там происходит.

Всегда наступает момент, когда какой-либо ресурс становится узким местом. Но ваш сервер, на мой взгляд, сейчас явно избыточно мощен.

Вы будете использовать больше памяти, когда у вас будет больше процессов Unicorn.
Вам понадобится больше процессов Unicorn, когда на вашем сайте увеличится трафик.

Я вижу, что все процессы Unicorn используют 0,0% ЦП, и, похоже, только worker[0] действительно что-то делает.

Вы уменьшили потребление памяти, запустив меньше процессов Unicorn. Это хорошо, потому что вы, похоже, всё равно их не использовали. Но «доступная память» — на самом деле плохой показатель. Вы оптимизируете не ту переменную.

Неиспользуемая память ничего вам не даёт. Это значит, что вы платите за то, что всё равно не используете. Если у вас постоянно доступно 2 ГБ памяти*, вы можете уменьшить размер сервера и сэкономить деньги.

*) Пересборка Discourse потребует больше памяти, поэтому нужно проверять, сколько памяти доступно во время пересборки. На практике не опускайтесь ниже 2 ГБ общей памяти и/или убедитесь, что у вас достаточно своп-памяти, как уже заметил Pfaffman.

Неверно. «Свободная» память, которая ничего не делает, — это плохо. А «доступная» память — это память, используемая системой, которую можно легко освободить, и это хорошо. :slight_smile:

Или официально:

Доступная память: Оценка того, сколько памяти доступно для запуска новых приложений без использования подкачки.

Источник: man free

Как видно на скриншоте ниже, свободная память практически не изменилась. Таким образом, почти вся память системы занята. Однако система теперь будет реже прибегать к подкачке, поскольку имеется больше доступной памяти, которую можно освободить при необходимости.

…да, я предпочитаю освобождать память, если она не используется, до тех пор, пока трафик не потребует изменений.

Спасибо ещё раз.

Полагаю, под «плохо» здесь имеется в виду, что это стоит денег, но ничего не даёт. Это довольно распространённый взгляд, потому что, когда нужны дополнительные ресурсы, всё становится дороже — а оперативная память — дорогая составляющая в этом уравнении.

А если у вас не так много денег, чтобы тратить их впустую, это просто глупо переплачивать (финская поговорка, без обид :rofl:).

Да, именно, что касается свободной памяти. Однако фраза «на самом деле доступная память — это плохо» — это именно то, что я имел в виду. :slight_smile: