优化 Discourse 服务器性能

是否有任何指南(或本论坛中的主题)提供关于优化托管 Discourse 站点服务器的性能提示?

我运行了 ./Discourse-set,它将内存设置为总量的四分之一(即 4096MB),并添加了 8 个 Unicorn 工作进程。但除此之外,我们还能做些什么,或者是否可以进一步调整这些设置?

该服务器配备 64GB ECC 内存和两块 512GB NVMe SSD(组成 RAID 阵列)。查看 top 命令显示,仅使用了约 5GB 内存,57392484 avail Mem。该服务器还运行其他非 Docker 站点,但它们并未占用太多资源,且 MySQL 已针对一个 2GB 的大型数据库进行了优化。负载平均值通常低于 1.0(一般在 0.50 到 1.0 之间,偶尔会超过)。目前尚未报告任何问题,但我希望尽可能充分利用服务器资源。

我在考虑是否应首先将 db_shared_buffers 加倍,以及目前被注释掉的 #db_work_mem: "40MB" 该如何处理。

欢迎提供任何信息或建议 :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: