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 个赞

谢谢!目前还没有出现问题。只是注意到内存使用率很高,但论坛并不算非常活跃。我只是习惯于积极主动地思考并检查哪些资源使用最多。这只是在一台拥有 6 核 @ 3.5 GHz 的 3GB VPS 上。速度不慢,相当快,只是觉得内存使用可能会成为未来的问题,并想知道可以调整哪些设置。

我会进一步阅读关于 Ruby on Rails 应用程序和优化的相关内容。再次感谢。

1 个赞

这取决于您所说的“使用率”是指哪个指标,这可能是正常的。但内存为 3GB,可能没有太多可调整的,如果您运行了 ./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

可用内存约为 900M。目前不是问题。但问题不是我来这里的目的。我想知道如果/当可用内存成为未来问题时该怎么做。除了增加更多内存之外。

在此级别,唯一真正能做的就是增加更多内存。如果您有 8GB 或 16GB,那么有一些事情可以做。如果有什么的话,您可能想再增加 1GB 的交换空间,但您可能没问题。

如果您运行 ./discourse-setup,它将创建一个 2GB 的交换文件。您在重建时可能会遇到问题。

好的,我通过将安装默认值从:
UNICORN_WORKERS: 8
更改为
UNICORN_WORKERS: 4
将可用内存使用量几乎翻了一番。

然后:sudo ./launcher rebuild app

我现在正在设置 PostgreSQL 的监控,看看那里有什么情况。

总会有某个资源成为瓶颈的时候。但我觉得你目前的服务器配置过高了。
当你有更多的 Unicorn 进程时,你会使用更多的内存。
当你的网站流量增加时,你需要更多的 Unicorn 进程。

我看到所有的 Unicorn 进程 CPU 使用率都是 0.0%,只有 worker[0] 似乎在实际工作。

你通过运行更少的 Unicorn 来减少内存使用。这很好,因为你似乎并没有使用它们。但可用内存实际上是一件坏事。你在优化错误的变量。

未使用的内存对你没有任何好处。这意味着你在为实际上没有使用的东西付费。如果你一直有 2 GB 的可用内存*,你可以缩小服务器规模并节省一些钱。

) 重建 Discourse 会消耗更多内存,所以你需要检查重建期间有多少内存可用。实际上,不要低于 2 GB 总内存,并且/或者确保你有足够的交换空间,正如 Pfaffman 已经说过的。

1 个赞

不正确。“空闲”的内存什么都不做是坏事。但“可用”内存是系统正在使用的、可以轻松释放的内存,这是一件好事:slight_smile:

或者官方解释:

可用内存: 估算在不进行交换的情况下,可用于启动新应用程序的内存量。

来源:man free

根据下图,空闲内存几乎没有变化。因此,系统几乎所有的内存都在使用中。但是,系统现在会减少交换,因为有更多的可用内存可以在需要时释放。

……是的,我宁愿在流量需要任何更改之前释放未使用的内存。

再次感谢。

我认为糟糕的在这里意味着它有成本,但什么也得不到。这是一种相当普遍的思考方式,因为当一个人需要更多资源时,成本也会更高——而 RAM 是其中昂贵的部分。

而且如果你没有太多钱可以浪费,那就有点愚蠢地支付过多的费用(芬兰广告语,无冒犯 :rofl:

1 个赞

是的,正是如此,关于可用内存。然而,“可用内存实际上是一件坏事”……这正是我要解决的问题。 :slight_smile: