# Tuning a Discourse server for performance

**URL:** https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927
**Category:** Self-hosting
**Tags:** hosting
**Created:** [16.Август.2018 22:13:29 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927 "2018-08-16T22:13:29Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![AstonJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/astonj/32/215041_2.png) [@AstonJ](https://meta.discourse.org/u/AstonJ)
#### Post date: [16.Август.2018 22:13:29 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/1 "2018-08-16T22:13:29Z")

</div>

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](https://www.pcworld.com/article/2899351/storage/everything-you-need-to-know-about-nvme.html) 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 😃

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [04.Апрель.2022 17:39:55 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/2 "2022-04-04T17:39:55Z")

</div>

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [04.Апрель.2022 17:42:31 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/3 "2022-04-04T17:42:31Z")

</div>

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

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [04.Апрель.2022 17:48:30 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/4 "2022-04-04T17:48:30Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [04.Апрель.2022 18:01:52 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/5 "2022-04-04T18:01:52Z")

</div>

> [@haydenjames](#):
>
> Только что заметил высокое потребление памяти

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

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [04.Апрель.2022 18:17:36 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/6 "2022-04-04T18:17:36Z")

</div>

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

```

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

 ![image](https://global.discourse-cdn.com/meta/original/3X/6/4/645b33c55a5754374ba0fca479783e5ad832256b.png)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [04.Апрель.2022 19:15:34 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/7 "2022-04-04T19:15:34Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [04.Апрель.2022 20:20:25 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/8 "2022-04-04T20:20:25Z")

</div>

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

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

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

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [04.Апрель.2022 21:37:41 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/9 "2022-04-04T21:37:41Z")

</div>

> [@haydenjames](#):
>
> Видимо, использование памяти может стать проблемой в будущем

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

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

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

> [@haydenjames](#):
>
> Мне удалось почти удвоить использование доступной памяти

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

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

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

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [04.Апрель.2022 21:58:29 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/10 "2022-04-04T21:58:29Z")

</div>

> [@RGJ](#):
>
> Но наличие доступной памяти на самом деле — это плохо.

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

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

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

Источник: `man free`

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

 ![image](https://global.discourse-cdn.com/meta/original/3X/a/3/a3474df037f8a091730803bdb3d273cab8d542ee.png)

> [@RGJ](#):
>
> Это хорошо, потому что вы всё равно, похоже, их не используете.

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

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

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [04.Апрель.2022 22:35:23 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/11 "2022-04-04T22:35:23Z")

</div>

> [@haydenjames](#):
>
> Неверно. «Свободная» память, которая ничего не делает, — это **плохо**.

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

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

---

<div class="post-metadata">

### Author: ![haydenjames](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/haydenjames/32/255678_2.png) [@haydenjames](https://meta.discourse.org/u/haydenjames)
#### Post date: [04.Апрель.2022 22:43:56 UTC](https://meta.discourse.org/t/tuning-a-discourse-server-for-performance/94927/12 "2022-04-04T22:43:56Z")

</div>

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